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

Bar Button返回RootViewController后无法恢复默认颜色问题

解决导航栏BarButton点击Segue跳转后返回仍处于按下状态的问题

这个问题我之前也碰到过,本质是系统在Segue触发的瞬间,没来得及重置BarButtonItem的高亮状态就完成了页面跳转,导致返回后按钮还停留在按下的视觉状态。下面给你几个靠谱的解决办法:

方法1:在返回时手动重置按钮状态

在你的RootViewController里重写viewWillAppear(_:)方法,强制把按钮的高亮状态关掉:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    // 假设你的BarButtonItem是用IBOutlet连接的,名字叫segueButton
    segueButton.isHighlighted = false
}

如果是用代码创建的按钮,直接找到对应的BarButtonItem,操作它的isHighlighted属性即可。

方法2:改用Action手动跳转,替代Segue绑定

放弃直接给BarButtonItem绑定Segue,而是给按钮加一个点击事件,在事件里手动push目标ViewController:

@IBAction func segueButtonTapped(_ sender: UIBarButtonItem) {
    let targetVC = storyboard?.instantiateViewController(withIdentifier: "ViewController") as! ViewController
    navigationController?.pushViewController(targetVC, animated: true)
}

这种方式下,系统会正常处理按钮的触摸状态,跳转完成后按钮会自动恢复到正常样式,返回时也不会有残留的按下状态。

方法3:用自定义UIButton做BarButtonItem

如果你的导航栏按钮需要自定义样式,干脆直接用UIButton来创建BarButtonItem,这样能更精准控制按钮状态:

let customButton = UIButton(type: .system)
customButton.setTitle("SegueButton", for: .normal)
customButton.addTarget(self, action: #selector(segueButtonTapped), for: .touchUpInside)
let barButtonItem = UIBarButtonItem(customView: customButton)
navigationItem.rightBarButtonItem = barButtonItem

自定义按钮的状态管理会更可靠,不会出现系统默认BarButtonItem的状态残留问题。

你可以根据自己的项目情况选其中一种方法,亲测都能解决这个问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:12:37