У меня есть контроллер представления, который отвечает за добавление нового объекта, скажем, нового контакта.Этот контроллер вида (AddContactViewController
) имеет следующий UIBarButtonItem
на UINavigationBar
, который запускается отключенным, пока не будет предоставлено достаточно информации для его включения.Затем, когда эта кнопка нажата, вызывается метод (doneButtonPressed
).
Схема выглядит следующим образом:
class AddContactViewController: UIViewController {
@IBOutlet weak var doneButton: UIBarButtonItem! {
didSet {
doneButton.isEnabled = false
doneButton.target = self
doneButton.action = #selector(self.doneButtonPressed)
}
}
@objc fileprivate func doneButtonPressed() {
// do some stuff ...
self.dismiss(animated: false, completion: nil)
}
}
Поскольку это довольно распространенная вещь, и есть многокода котельной плиты, я работал над протоколом AddingHandler
, но не совсем понял, как получить UIBarButtonItem
в качестве переменной weak
, которая подключается к storboard или, если это даже правильный способgo.
protocol AddingHandler {
var doneButton: UIBarButtonItem? { get set }
func doneButtonPressed()
}
extension protocol where Self: UIViewController {
func configureDoneButton() {
doneButton.isEnabled = false
doneButton.target = self
doneButton.action = #selector(self.doneButtonPressed)
}
}
Любая помощь или комментарии в создании этой работы будут высоко оценены.
Проблема Как лучше всего добавить weak
UIButton
к протоколу, который затем может быть подключен к плате рассказов, где UIViewController
реализует его?Поскольку здесь много повторяющегося кода, я хотел бы получить еще один AddSomethingViewController
. Мне было интересно, есть ли более аккуратный способ написать это только один раз (в протоколе с расширением), а затем вызвать протокол в любом контроллере представления, которыйдобавив что-то новое ...