Представление UIAlertController из расширения UINavigationItem

#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