ios - 在 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
}
}
但这没有效果。菜单按钮仍然存在,但未添加新按钮。那应该怎么做呢?
解决方案
但这没有效果
是的,它确实。但是你没有时间看到效果。你说同样的事情两次,因为setRightBarButtonItem
是一样的rightBarButtonItem =...
所以无论你第二次说哪一个,那就是最终被服从的那个;无论哪种方式,它都会撕掉现有的右栏按钮项目并将其替换为另一个。
如果目标是拥有多个右栏按钮项目,那就是 therightBarButtonItems
的用途(注意复数)。您可以setRightBarButtonItems
改为调用(再次注意复数)。当然,查看是否已经存在右栏按钮项目并考虑到这一点取决于您。没有什么神奇的append
方法。
推荐阅读
- html - Bootstrap 中的滚动卡片
- mongodb - MongoDB - 计数与文档数不匹配
- javascript - 赛普拉斯 - 执行“cypress open”时出错
- angular - 如何在 ionic 4 中调用 sms api?
- amazon-web-services - AWS 侦听器 cf 模板在 aws cli 中给出错误,但在控制台中有效(设计模板)
- azure - 将对 Azure 应用程序 (WebApi) 的访问限制为仅对另一个 Azure 应用程序(守护程序客户端)
- arrays - 无法将while循环中的项目附加到bash中的空数组
- php - 寻找可靠的方法来知道我的手机是否在家
- c# - 减去不同的第 1 列和第 2 列的数据,在第 3 列显示其答案
- flutter - 我无法在颤振视频播放器中从 http 路径流式传输视频