我有一组视图控制器,它们将有一个菜单栏按钮。我为这些视图控制器创建了一个协议来采用。此外,我还扩展了协议以添加默认功能。
我的协议看起来像,
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 中实现该方法,它可以正常工作。但是我会在所有符合协议的视图控制器中复制代码。
我在这里做错什么了吗?提前致谢。