メニューバーボタンを持つビューコントローラのセットがあります。私はそれらの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でコードを複製しています。
ここで間違っていることは何ですか? ありがとうございます。