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

UIKit中如何在每次点击导航栏右侧按钮时更新其Tint Color

实现导航栏按钮点击切换Tint Color的方案

没问题,咱们一步步来搞定这个点击切换按钮 tintColor 的需求:

  • 第一步:把按钮存为实例变量
    你当前的代码里,导航栏按钮是临时创建的局部变量,点击事件触发时没法直接访问它。所以首先要在你的ViewController类里声明一个实例变量来保存这个按钮:

    private var favoritesBarButtonItem: UIBarButtonItem?
    
  • 第二步:初始化按钮时赋值给实例变量
    修改你原来的按钮初始化代码,把创建好的UIBarButtonItem赋值给刚才声明的实例变量,这样后续点击时能直接操作它:

    let starImage = UIImage(systemName: SystemImages.FilledStar.rawValue)
    favoritesBarButtonItem = UIBarButtonItem(image: starImage, style: .plain, target: self, action: #selector(addOrRemoveFromFavorites))
    favoritesBarButtonItem?.tintColor = presenter.addToFavoriteButtonColor()
    navigationItem.rightBarButtonItem = favoritesBarButtonItem
    
  • 第三步:在点击方法里更新Tint Color
    在你的addOrRemoveFromFavorites方法中,先让Presenter处理收藏状态的切换,然后获取更新后的颜色,再设置给按钮:

    @objc private func addOrRemoveFromFavorites() {
        // 先让Presenter处理收藏状态的切换逻辑(比如添加/移除收藏)
        presenter.toggleFavoriteStatus()
        
        // 获取Presenter返回的最新颜色
        let updatedTintColor = presenter.addToFavoriteButtonColor()
        
        // 给按钮设置新的tintColor
        favoritesBarButtonItem?.tintColor = updatedTintColor
    }
    
  • 关键注意点
    要确保你的presenter.addToFavoriteButtonColor()方法是根据当前的收藏状态返回对应颜色的——比如收藏状态返回UIColor.systemYellow,未收藏状态返回UIColor.systemGray,这样每次切换状态后获取的颜色才是符合预期的。

内容的提问来源于stack exchange,提问作者Igor Ševtšenko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 10:52:41