添加到iOS/Swift中的现有UINavigationController
我有一个现有的导航控制器代理,在应用程序中的每个视图控制器上放置一个菜单按钮添加到iOS/Swift中的现有UINavigationController,ios,swift,xcode,Ios,Swift,Xcode,我有一个现有的导航控制器代理,在应用程序中的每个视图控制器上放置一个菜单按钮 class MyNavigationControllerDelegate: NSObject, UINavigationControllerDelegate { func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated:
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
}
}
但这没有效果。菜单按钮仍然存在,但未添加新按钮。那么应该如何做呢
但这没有效果
是的。但是你没有时间看到效果。你说了两遍同样的话,因为setRightBarButtonItem
与rightBarButtonItem=…
是一样的,所以无论你说第二个,那都是最终被遵守的;无论哪种方式,它都会撕掉现有的右栏按钮项,并用另一个替换它
如果目标是拥有多个右栏按钮项,那么这就是rightBarButtonItems
的作用(注意复数形式)。您可以调用setRightBarButtonims
(再次注意复数形式)。当然,看看是否已经有一个右栏按钮项目,并考虑到这一点取决于您。没有神奇的append
方法
但这没有效果
是的。但是你没有时间看到效果。你说了两遍同样的话,因为setRightBarButtonItem
与rightBarButtonItem=…
是一样的,所以无论你说第二个,那都是最终被遵守的;无论哪种方式,它都会撕掉现有的右栏按钮项,并用另一个替换它
如果目标是拥有多个右栏按钮项,那么这就是
rightBarButtonItems
的作用(注意复数形式)。您可以调用setRightBarButtonims
(再次注意复数形式)。当然,看看是否已经有一个右栏按钮项目,并考虑到这一点取决于您。没有神奇的append
方法。我可以覆盖CustomViewController
中的UINavigationControllerDelegate
,但这是最好的/唯一的方法吗?我可以覆盖CustomViewController
中的UINavigationControllerDelegate
但这是最好的/唯一的方法吗?使用委托文件中的setRightBarButtonims
会将该委托与此特定视图控制器更紧密地耦合,因此我试图避免在委托中指定特定视图控制器。目前,有效的解决方案需要在视图控制器中使用setRightBarButtonims
重复代码。我觉得这很管用,但很草率。现在我不知道你在说什么。问题是为什么你只看到一个右栏按钮项,我解释了。事实上,问题是“应该如何做”,而不是“为什么会发生这种情况”,但你让我走上了正确的道路,“没有神奇的附加方法。”在委托文件中使用setRightBarButtonims
将使该委托与此特定视图控制器更紧密地耦合,因此我试图避免在委托中指定特定视图控制器。目前,有效的解决方案需要在视图控制器中使用setRightBarButtonims
重复代码。我觉得这很管用,但很草率。现在我不知道你在说什么。问题是为什么你只看到一个右栏按钮项,我解释了。事实上,问题是“应该如何做”,而不是“为什么会发生这种情况”,但你让我走上了正确的道路,“没有神奇的附加方法。”