首页 > 解决方案 > 在 iOS / Swift 中添加到现有的 UINavigationController

问题描述

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

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
   }
}

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

标签: iosswiftxcode

解决方案


但这没有效果

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

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


推荐阅读