メニューバーボタンを持つビューコントローラーのセットがあります。それらのviewControllerが採用するためのプロトコルを作成しました。また、プロトコルを拡張してデフォルトの機能を追加しました。
私のプロトコルは次のようになります
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 内にメソッドを実装すると、正常に動作します。しかし、プロトコルに準拠するすべてのviewControllerでコードを複製します。
ここで何か間違っていますか?前もって感謝します。