У меня есть набор контроллеров, которые будут иметь кнопку панели меню. Я создал протокол для этих viewControllers для принятия. Кроме того, я расширил протокол, чтобы добавить функциональные возможности по умолчанию.
Мой протокол выглядит,
protocol CenterViewControllerProtocol: class {
var containerDelegate: ContainerViewControllerProtocol? { get set }
func setupMenuBarButton()
}
И расширение выглядит так,
extension CenterViewControllerProtocol where Self: UIViewController {
func setupMenuBarButton() {
let barButton = UIBarButtonItem(title: "Menu", style: .Done, target: self, action: "menuTapped")
navigationItem.leftBarButtonItem = barButton
}
func menuTapped() {
containerDelegate?.toggleSideMenu()
}
}
Мой viewController принимает протокол -
class MapViewController: UIViewController, CenterViewControllerProtocol {
weak var containerDelegate: ContainerViewControllerProtocol?
override func viewDidLoad() {
super.viewDidLoad()
setupMenuBarButton()
}
}
Я получил кнопку, чтобы отображать красиво, но когда я нажимаю на нее, приложение вылетает с
[AppName.MapViewController menuTapped]: unrecognized selector sent to instance 0x7fb8fb6ae650
Если я реализую метод внутри ViewController, он отлично работает. Но я бы дублировал код во всех viewControllers, которые соответствуют протоколу.
Что-нибудь я здесь делаю неправильно? Спасибо заранее.