我创建了UINavigationController的子类,并在导航栏中放置了一个UIBarButtonItem。代码如下:
SharedNavigationController.swift
func showNextButton(nc: UINavigationController) {
print(nc)
let nextButton = UIBarButtonItem(title: "Next", style: UIBarButtonItemStyle.Plain, target: nc, action: "next")
print(nextButton.target)
self.navigationBar.topItem?.rightBarButtonItem = nextButton
}
然而,当按下具有错误目标的按钮时,我遇到了问题。而不是目标是导航控制器(创建它的类),而是导航控制器中的当前视图控制器。结果,我收到以下错误:
***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [App.SignupBasicInfoForm next]:无法识别的选择器发送到实例0x7af7d0c0'
我最初将目标设置为“self”,但它引用了导航控制器中的视图控制器,而不是导航控制器本身。我也尝试将目标设置为self.navigationController
,效果相同。最后,我明确地将SharedNavigationController
的实例传递给showNextButton
方法,如上面的代码所示。印刷声明给我这个:
print(nc): <App.SharedNavigationController: 0x7d41f800>
print(nextButton.target): Optional(<App.SharedNavigationController: 0x7d41f800>)
所以至少在SharedNavigationController
中,目标是正确的。但是,当从导航控制器内的当前视图控制器轻击按钮时,目标似乎已更改。我上面尝试的东西不起作用。如何为按钮指定正确的目标,而无需定义方法或从视图控制器而不是导航控制器设置条形按钮项?
答案 0 :(得分:0)
您可能需要在子类中覆盖此func以执行您想要的操作
override func pushViewController(viewController: UIViewController, animated: Bool) {
viewController.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Next", style: UIBarButtonItemStyle.Plain, target: nc, action: "next")
super.pushViewController(viewController, animated: animated)
}