我必须在项目的几乎每个视图上显示一个导航栏按钮项。
我延长了UIViewController
extension UIViewController{
func addNavBarItem(){
//add the bar button item
}
}
我在addNavBarItem()
上致电viewDidLoad
。但是,点击此按钮时所采取的操作对于每个视图可能会有所不同。有没有办法将此按钮的目标设置为调用此方法的实际视图控制器?理想情况下,我想要像......那样的东西。
extension UIViewController{
func addNavBarItem(){
//do stuff
btn.addTarget(self, action: #selector(OriginalViewController.doSomething), forControlEvents: .TouchUpInside)
}
}
但OriginalViewController
不可用。我应该采用快速解决方案或替代模式吗?
答案 0 :(得分:0)
我使用的一个解决方案是子类化UINavigationController
并将我的导航栏项目代码放入willShowViewController
委托方法中,如此...
class MyNavigationController : UINavigationController {
override func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
super.navigationController(navigationController, willShowViewController: viewController, animated: animated)
let backButton = UIBarButtonItem(image: UIImage(named: "ic_menu"), style: UIBarButtonItemStyle.Plain, target: viewController, action: "doSomething")
viewController.navigationItem.leftBarButtonItem = backButton
}
}
这意味着当您添加目标时,您可以引用导航控制器显示的确切viewController
。