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
相关产品推荐
相关产品推荐

