具有特定控制器功能的每个视图上的条形按钮项

时间:2016-04-13 14:19:46

标签: swift uiviewcontroller uinavigationcontroller

我必须在项目的几乎每个视图上显示一个导航栏按钮项。

我延长了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不可用。我应该采用快速解决方案或替代模式吗?

1 个答案:

答案 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