1

我的导航栏中有一个 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")
            }
        }

问题来了,当我将图标图像切换到原始的剪影.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

我做错了什么,为什么之后会发生色调变化?如果您需要更多详细信息,请告诉我。

4

3 回答 3

4

如果你用谷歌搜索如何为你的栏按钮设置自定义图像,几乎每个人都会告诉你创建一个UIButton,然后UIBarButtonItemUIButton作为一个创建customView:。在这种情况下,您在这里做的是正确的事情。

但是,如果您创建UIBarButtonItemvia cutomView:,则无法再更改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
}
于 2016-03-22T00:21:29.600 回答
1

以防有人仍在寻找解决方案。

barButtonItem.setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.red], for: .normal)

通过设置NSAttributedString.Key.foregroundColor标题文本属性,可以设置按钮的颜色。

于 2021-07-13T01:28:37.203 回答
0

如果你遵循这种方式,你可以做任何你需要的事情。

let logoutNavBarButtonItem = UIBarButtonItem.init(
    image: imageName,
    style: .plain,
    target: self,
    action: #selector(buttonPressed))
navigationItem.leftBarButtonItem = logoutNavBarButtonItem
于 2021-10-14T14:48:55.397 回答