Swift4中如何在NavigationController的ViewController上添加UIBarButtonItem?
我来帮你搞定这个问题!你的注册页面没法添加导航栏按钮,不管是拖拽还是代码都没效果,大概率是几个常见原因导致的,咱们一步步排查解决:
首先排查最核心的问题:页面是否被导航控制器管理?
如果你的注册页面没有嵌入到UINavigationController里,那导航栏本身就不存在,自然没法添加按钮。解决方法:
- 如果你用Storyboard:选中注册页面的ViewController,点击Xcode顶部菜单的
Editor -> Embed In -> Navigation Controller,这样页面就会被导航控制器包裹,导航栏就会显示出来。 - 如果你用代码跳转:确保跳转时是从已有的导航控制器push进去,或者把注册页面包装在导航控制器里,比如:
let registerVC = RegisterViewController() navigationController?.pushViewController(registerVC, animated: true)
修正你的代码实现
你之前的代码没生效,大概率是没把按钮赋值给导航栏的对应位置,而且action没指定响应方法。试试这段完整的代码:
var btSalvar: UIBarButtonItem? override func viewDidLoad() { super.viewDidLoad() // 初始化按钮,注意标题拼写(你之前写的"Salver"应该是笔误,改成"Salvar"更准确) btSalvar = UIBarButtonItem(title: "Salvar", style: .plain, target: self, action: #selector(saveTapped)) // 将按钮设置为导航栏右侧按钮 self.navigationItem.rightBarButtonItem = btSalvar } // 按钮点击的响应方法,必须加@objc标记才能被识别 @objc func saveTapped() { // 这里写你的注册信息保存逻辑 print("保存按钮被点击啦!") }
划重点:一定要用self.navigationItem而不是self.navigationController?.navigationItem,前者是当前页面专属的导航项,后者是导航控制器的全局导航项,设置后者会影响整个导航栈的页面。
拖拽失效的额外排查
如果Storyboard拖拽还是不行,试试这些操作:
- 先确认注册页面已经嵌入导航控制器,导航栏在Storyboard里是可见的;
- 清理项目缓存:点击Xcode顶部菜单
Product -> Clean Build Folder,然后重启Xcode; - 检查是否有自定义导航栏的代码:比如在AppDelegate或者ViewController里设置了
UINavigationBar.appearance()的样式,导致无法拖拽添加按钮,暂时注释掉相关代码试试。
最后检查导航栏是否被隐藏
如果以上都没问题,看看你的代码里有没有隐藏导航栏的逻辑,比如在viewWillAppear里写了:
navigationController?.isNavigationBarHidden = true
如果有的话,改成false或者直接注释掉,这样导航栏和按钮就能正常显示了。
内容的提问来源于stack exchange,提问作者Augusto
相关产品推荐
相关产品推荐

