let navBar = navigationController?.navigationBar {
let rightButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addNextEmoji))
navBar.topItem?.setRightBarButton(rightButton, animated: false)
let leftButton = UIBarButtonItem(barButtonSystemItem: .undo, target: self, action: #selector(removeLastEmoji))
navBar.topItem?.setLeftBarButton(leftButton, animated: false)
}
if let navBar = navigationController?.navigationBar:
Этот код проверяет, есть ли у вашего текущего контроллера свойство navigationController, и если есть, то у него берется navigationBar. Если все это существует, код внутри блока if let будет выполнен. Если навигационной панели нет, код пропускается.
Зачем делать такую проверку, если я указал navigationController в SceneDelegate?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = scene as? UIWindowScene else { return }
let initialViewController = EmojiViewController()
let navigationController = UINavigationController(rootViewController: initialViewController)
let window = UIWindow(windowScene: windowScene)
window.rootViewController = navigationController
self.window = window
window.makeKeyAndVisible()
}
navBar.topItem?.setRightBarButton(rightButton, animated: false)
нужно ли писать так или можно сделать метод и положить туда:
let rightButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(rightButtonTapped))
self.navigationItem.rightBarButtonItem = rightButton
Как в целом отличается добавление кнопок в Navigation Bar?
self.navigationItem.rightBarButtonItem = rightButton
от
navBar.topItem?.setRightBarButton(rightButton, animated: false)
Ты можешь и не делать проверку, почитай что такое optional chaining Делай как угодно. Разница в наличии дефолтной анимации
Обсуждают сегодня