无法修改 UIBarButton tintColor
Cannot modify UIBarButton tintColor
我的导航栏中有一个 UIBarButton,我从情节提要中为其设置了一个图像 (silhouette.png),我可以随意更改该图像的色调(颜色):
if let num2 = Int(s, radix: 16) { //s="00ff00"
flamingoBtn.tintColor = UIColor(netHex:num2) //this btn is an IBoutlet
}
但是,在某些时候,我以编程方式将原始图像更改为另一张图像 (icon.png),因此在这种情况下我不需要更改色调,到目前为止一切顺利:
if let url = NSURL(string: "http://www.123di.com/CanonSGLens_132.png") {
if let data = NSData(contentsOfURL: url) {
var newImgThumb : UIImage=UIImage(data: data)!
var iconBtn = UIButton(frame: CGRect(x: 0, y: 0, width: 35, height: 35))
iconBtn.setImage(newImgThumb, forState: UIControlState.Normal)
iconBtn.addTarget(self, action: "goToSettings:", forControlEvents: UIControlEvents.TouchUpInside)
var item = UIBarButtonItem(customView: iconBtn)
self.navigationItem.leftBarButtonItem = item
print("CUSTOM ICON: DOWNLOADED")
}
}
问题来了,当我切换到原来的图标图像时silhouette.png,因为我无法再修改色调,它始终保持蓝色轮廓(默认颜色),而不是绿色,红色,等:
var newImgThumb : UIImage=UIImage(named: "happyface.png")!
var replyBtn = UIButton(frame: CGRect(x: 0, y: 0, width: 35, height: 35))
replyBtn.setImage(newImgThumb, forState: UIControlState.Normal)
replyBtn.addTarget(self, action: "goToSettings:", forControlEvents: UIControlEvents.TouchUpInside)
replyBtn.tintColor = UIColor.greenColor()
var item = UIBarButtonItem(customView: replyBtn)
item.tintColor = UIColor.greenColor()//UIColor(netHex:num2)
self.navigationItem.leftBarButtonItem = item
我做错了什么,为什么之后会更改色调??
如果您需要更多详细信息,请告诉我。
如果您 google 如何为您的栏按钮设置自定义图像,几乎每个人都会告诉您创建一个 UIButton
,然后从 [=12] 创建 UIBarButtonItem
=] 作为 customView:
。在这种情况下,您在这里做的是正确的事情。
但是,如果您通过 cutomView:
创建 UIBarButtonItem
,则无法再更改 tintColor
。以下是您如何设置自定义图像并更改 tintColor
let item = UIBarButtonItem.init(image: UIImage(named: "happyface.png")!,
style: .Plain,
target: self,
action: Selector("goToSettings:"))
item.tintColor = UIColor.greenColor()
self.navigationItem.leftBarButtonItem = item
根据您在哪里调用上面的代码,您可能需要将其放入此结构中,使其在 UI 线程中 运行 并使更改可见:
dispatch_async(dispatch_get_main_queue()) {
//code here
}
以防有人还在寻找解决方案。
barButtonItem.setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.red], for: .normal)
通过设置标题文本属性NSAttributedString.Key.foregroundColor
,可以设置按钮的颜色。
如果你按照这种方式去做,你可以做任何你想做的事情。
let logoutNavBarButtonItem = UIBarButtonItem.init(
image: imageName,
style: .plain,
target: self,
action: #selector(buttonPressed))
navigationItem.leftBarButtonItem = logoutNavBarButtonItem
我的导航栏中有一个 UIBarButton,我从情节提要中为其设置了一个图像 (silhouette.png),我可以随意更改该图像的色调(颜色):
if let num2 = Int(s, radix: 16) { //s="00ff00"
flamingoBtn.tintColor = UIColor(netHex:num2) //this btn is an IBoutlet
}
但是,在某些时候,我以编程方式将原始图像更改为另一张图像 (icon.png),因此在这种情况下我不需要更改色调,到目前为止一切顺利:
if let url = NSURL(string: "http://www.123di.com/CanonSGLens_132.png") {
if let data = NSData(contentsOfURL: url) {
var newImgThumb : UIImage=UIImage(data: data)!
var iconBtn = UIButton(frame: CGRect(x: 0, y: 0, width: 35, height: 35))
iconBtn.setImage(newImgThumb, forState: UIControlState.Normal)
iconBtn.addTarget(self, action: "goToSettings:", forControlEvents: UIControlEvents.TouchUpInside)
var item = UIBarButtonItem(customView: iconBtn)
self.navigationItem.leftBarButtonItem = item
print("CUSTOM ICON: DOWNLOADED")
}
}
问题来了,当我切换到原来的图标图像时silhouette.png,因为我无法再修改色调,它始终保持蓝色轮廓(默认颜色),而不是绿色,红色,等:
var newImgThumb : UIImage=UIImage(named: "happyface.png")!
var replyBtn = UIButton(frame: CGRect(x: 0, y: 0, width: 35, height: 35))
replyBtn.setImage(newImgThumb, forState: UIControlState.Normal)
replyBtn.addTarget(self, action: "goToSettings:", forControlEvents: UIControlEvents.TouchUpInside)
replyBtn.tintColor = UIColor.greenColor()
var item = UIBarButtonItem(customView: replyBtn)
item.tintColor = UIColor.greenColor()//UIColor(netHex:num2)
self.navigationItem.leftBarButtonItem = item
我做错了什么,为什么之后会更改色调?? 如果您需要更多详细信息,请告诉我。
如果您 google 如何为您的栏按钮设置自定义图像,几乎每个人都会告诉您创建一个 UIButton
,然后从 [=12] 创建 UIBarButtonItem
=] 作为 customView:
。在这种情况下,您在这里做的是正确的事情。
但是,如果您通过 cutomView:
创建 UIBarButtonItem
,则无法再更改 tintColor
。以下是您如何设置自定义图像并更改 tintColor
let item = UIBarButtonItem.init(image: UIImage(named: "happyface.png")!,
style: .Plain,
target: self,
action: Selector("goToSettings:"))
item.tintColor = UIColor.greenColor()
self.navigationItem.leftBarButtonItem = item
根据您在哪里调用上面的代码,您可能需要将其放入此结构中,使其在 UI 线程中 运行 并使更改可见:
dispatch_async(dispatch_get_main_queue()) {
//code here
}
以防有人还在寻找解决方案。
barButtonItem.setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.red], for: .normal)
通过设置标题文本属性NSAttributedString.Key.foregroundColor
,可以设置按钮的颜色。
如果你按照这种方式去做,你可以做任何你想做的事情。
let logoutNavBarButtonItem = UIBarButtonItem.init(
image: imageName,
style: .plain,
target: self,
action: #selector(buttonPressed))
navigationItem.leftBarButtonItem = logoutNavBarButtonItem