You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift4中如何在NavigationController的ViewController上添加UIBarButtonItem?

解决注册页面无法添加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拖拽还是不行,试试这些操作:

  1. 先确认注册页面已经嵌入导航控制器,导航栏在Storyboard里是可见的;
  2. 清理项目缓存:点击Xcode顶部菜单 Product -> Clean Build Folder,然后重启Xcode;
  3. 检查是否有自定义导航栏的代码:比如在AppDelegate或者ViewController里设置了UINavigationBar.appearance()的样式,导致无法拖拽添加按钮,暂时注释掉相关代码试试。

最后检查导航栏是否被隐藏

如果以上都没问题,看看你的代码里有没有隐藏导航栏的逻辑,比如在viewWillAppear里写了:

navigationController?.isNavigationBarHidden = true

如果有的话,改成false或者直接注释掉,这样导航栏和按钮就能正常显示了。

内容的提问来源于stack exchange,提问作者Augusto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:52:12