Swift-5.0 中的 UIBarButtonItem 颜色设置
Posted
技术标签:
【中文标题】Swift-5.0 中的 UIBarButtonItem 颜色设置【英文标题】:UIBarButtonItem color setting in Swift-5.0 【发布时间】:2019-09-16 12:50:06 【问题描述】:我意识到我的 UIBarButtonItem(左右按钮)的颜色行为不符合预期。
如果我按住右侧的 UIBarButton(参见视频),颜色会从浅黄色变为 gray'isch 深黄色。
但是,我想要一个保持相同浅黄色的解决方案,无论选择任何按钮、按住等等。按钮颜色应始终保持相同的浅黄色。
我怎样才能做到这一点?
这是在模拟器中完成的视频: (您可以清楚地看到单击 - 按住会导致颜色变化。即使按住不放也保持浅黄色的解决方案是什么??)
代码如下:
@IBOutlet weak var btnCancel: UIBarButtonItem!
@IBOutlet weak var btnApply: UIBarButtonItem!
override func viewDidLoad()
super.viewDidLoad()
btnCancel.title = "Cancel".localized
btnApply.title = "Apply".localized
navigationItem.title = "Filter".localized
let attributes: [NSAttributedString.Key : Any] = [ .font: UIFont(name: "Avenir-Heavy", size: 14)!, .foregroundColor: UIColor.yellow]
navigationItem.rightBarButtonItem?.setTitleTextAttributes(attributes, for: .normal)
navigationItem.rightBarButtonItem?.setTitleTextAttributes(attributes, for: .selected)
navigationItem.rightBarButtonItem?.setTitleTextAttributes(attributes, for: .highlighted)
navigationItem.rightBarButtonItem?.setTitleTextAttributes(attributes, for: .focused)
【问题讨论】:
我认为使用标准 UIBarButtonItem 是不可能的,因为大多数应用程序中所有 UIButton 的行为都是本机和标准的。您可以选择的一种选择是设置customView
属性,而不是使用UIBarButtonItem 的title
。不太清楚为什么你会想要那个
谢谢 - 我会查看 cutomView。而“为什么”是由我的设计师推动的;)
【参考方案1】:
以下是通过将普通按钮包装为 barButton 项来实现所需效果的方法。
private let normalButton: UIButton =
let normalButton = UIButton()
normalButton.frame = CGRect(x: 0, y: 0, width: 80, height: 30)
normalButton.setTitle("Apply", for: .normal)
normalButton.setTitleColor(.yellow, for: .normal)
normalButton.isUserInteractionEnabled = true
return normalButton
()
private lazy var applyRightBarButtonItem: UIBarButtonItem =
// Wrap your button as UIBarButtonItem
return UIBarButtonItem(customView: normalButton)
()
override func viewDidLoad()
super.viewDidLoad()
// Important for detecting taps
normalButton.addTarget(self, action: #selector(normalButtonTapped), for: .touchUpInside)
// Set your right bar button ( You can do the same for the left one)
self.navigationItem.rightBarButtonItem = applyRightBarButtonItem
@objc private func normalButtonTapped()
// TODO: - Handle tap
print("Button Tapped")
【讨论】:
【参考方案2】:请尝试这种方法:
// MARK:- Custom BarButton Appearance
private extension YourViewController
func setupBarButtonAppearance()
let color = UIColor.yellow
let font = UIFont(name: "Avenir-Heavy", size: 14)!
let customAppearance = UIBarButtonItem.appearance(whenContainedInInstancesOf: [YourViewController.self])
customAppearance.setTitleTextAttributes([
NSAttributedString.Key.foregroundColor : color,
NSAttributedString.Key.font : font], for: .normal)
customAppearance.setTitleTextAttributes([
NSAttributedString.Key.foregroundColor : color,
NSAttributedString.Key.font : font], for: .highlighted)
只需在 viewDidLoad() 中调用此方法
【讨论】:
以上是关于Swift-5.0 中的 UIBarButtonItem 颜色设置的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 5.0 中从 AppDelegate 实例化窗口失败 [重复]