gpt4 book ai didi

swift - 每个 View 上的栏按钮项目具有特定的 Controller 功能

转载 作者:行者123 更新时间:2023-11-30 13:30:43 26 4
gpt4 key购买 nike

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

我扩展了UIViewController

extension UIViewController{
func addNavBarItem(){
//add the bar button item
}
}

然后我在 viewDidLoad 上调用 addNavBarItem()。但是,点击此按钮时所采取的操作对于每个 View 可能有所不同。有没有办法将此按钮的目标设置为调用此方法的实际 View Controller ?理想情况下,我想要类似的东西......

extension UIViewController{
func addNavBarItem(){
//do stuff
btn.addTarget(self, action: #selector(OriginalViewController.doSomething), forControlEvents: .TouchUpInside)
}
}

但是 OriginalViewController 不可用。我应该采用快速解决方案或替代模式吗?

最佳答案

我使用的一个解决方案是子类化 UINavigationController 并将我的导航栏项目代码放入 willShowViewController 委托(delegate)方法中,如下所示...

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
}

}

这意味着当您添加目标时,您可以引用导航 Controller 显示的确切viewController

关于swift - 每个 View 上的栏按钮项目具有特定的 Controller 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36601292/

26 4 0