【问题标题】:Adding to existing UINavigationController in iOS / Swift在 iOS / Swift 中添加到现有的 UINavigationController
【发布时间】:2020-10-06 02:20:27
【问题描述】:

我有一个现有的导航控制器委托,它在应用程序的每个视图控制器上放置一个菜单按钮。

class MyNavigationControllerDelegate: NSObject, UINavigationControllerDelegate {
    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
        let navItem = viewController.navigationItem
        let menuBtn = MyCustomMenuButton()
         ...
        navItem.setRightBarButton(menuBtn, animated: false)
}

这很好用...我在每个视图的导航栏中都有一个菜单按钮。但是对于某些视图,我想在菜单按钮旁边的右侧添加另一个按钮,所以我添加了这个:

class CustomViewController: UIViewController, UINavigationControllerDelegate {

   override func viewDidLoad() {
        super.viewDidLoad()
        let newButton = UIBarButtonItem(title: "(+)", style: .plain, target: nil, action: nil)
        self.navigationItem.rightBarButtonItem = newButton
   }
}

但这没有任何效果。菜单按钮仍然存在,但未添加新按钮。那应该怎么做呢?

【问题讨论】:

  • 我可以覆盖CustomViewController 中的UINavigationControllerDelegate,但这是最好/唯一的方法吗?

标签: ios swift xcode


【解决方案1】:

但这没有效果

是的,确实如此。但是您没有时间查看效果。你说同样的事情两次,因为setRightBarButtonItemrightBarButtonItem =... 是一样的所以无论你说第二个,那是最终服从的那个;无论哪种方式,它都会撕掉现有的右栏按钮项并将其替换为另一个。

如果目标是拥有多个右栏按钮项目,这就是rightBarButtonItems 的用途(注意复数)。您可以改为调用setRightBarButtonItems(再次注意复数)。当然,查看是否有已经右栏按钮项并考虑到这一点取决于您。没有神奇的append 方法。

【讨论】:

  • 在委托文件中使用setRightBarButtonItems 会更紧密地将该委托与此特定视图控制器耦合,因此我试图避免在委托中指定特定视图控制器。现在有效的解决方案需要在视图控制器中使用setRightBarButtonItems 复制代码。它有效,但我认为很草率。
  • 现在我不知道你在说什么。问题是为什么您只看到一个右栏按钮项,我对此进行了解释。
  • 实际上,问题是,“这应该怎么做”,而不是“为什么会这样”,但你让我走上了正确的道路,“没有神奇的附加方法。”
猜你喜欢
  • 1970-01-01
  • 2011-06-24
  • 2016-10-16
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
相关资源
最近更新 更多