#swift #uikit #uialertview #uialertcontroller #uialertaction
Вопрос:
Я пытаюсь добавить одну и ту же кнопку правой панели на нескольких контроллерах просмотра, поэтому я сделал расширение для UINavigationItem. Мое расширение:
extension UINavigationItem{ func barButton() { let barButton = UIBarButtonItem() barButton.image = UIImage(systemName: "person.fill") barButton.tintColor = .white barButton.action = #selector(barButtonClicked) barButton.target = self self.rightBarButtonItem = barButton } @objc func barButtonClicked() { let alertController = UIAlertController() var action = UIAlertAction(title: "Log Out", style: .destructive) { action in print("logout") } alertController.addAction(action) action = UIAlertAction(title: "History", style: .default, handler: { action in print("history") }) alertController.addAction(action) }
}
Я вызываю функцию barButton в разных контроллерах просмотра с self.navigationItem.barButton() в viewDidLoad, и это работает, но я не знаю, как представить это предупреждение без self.present (), указывающего на конкретный контроллер. Спасибо вам за вашу помощь.
Ответ №1:
Вы можете написать функцию селектора из контроллера вида
func barButton(func: Selector) { let barButton = UIBarButtonItem() barButton.image = UIImage(systemName: "person.fill") barButton.tintColor = .white barButton.action = func barButton.target = self self.rightBarButtonItem = barButton }
и напишите функцию @objc в контроллере представления, и если вам нужно написать одну и ту же функцию для всех. вы можете создать функцию в расширении UIViewController