如何为特定的 UIBarButtonItem 着色?

Posted

技术标签:

【中文标题】如何为特定的 UIBarButtonItem 着色?【英文标题】:How can I tint a specific UIBarButtonItem? 【发布时间】:2013-10-08 17:33:28 【问题描述】:

ios 6 和 xcode 4 中,我有这个: https://dl.dropboxusercontent.com/u/60718318/photo.PNG 这很容易用代码创建

[editButton setTintColor:[UIColor theGreenColor];

但在 iOS 7 手机上,使用 xcode 5 使用 iOS 6 SDK 构建的应用程序,使用相同的代码,编辑按钮变得不着色。 (我最多只能发布两张图片,所以想象一下编辑按钮与后退按钮的颜色相同) SO 和整个互联网上的许多人都说,现在为按钮着色的唯一方法是调用

self.navigationController.navigationBar.tintColor = [UIColor theGreenColor];

WWDC 会议中也提到了这一点。但是,当我尝试这样的事情时,我只会得到以下信息: https://dl.dropboxusercontent.com/u/60718318/photo-2.PNG 这甚至不接近正确。根据我观看的 WWDC 会议,这应该为两个按钮着色,而不仅仅是 1。我怎样才能像在 xcode 4 中的 iOS 6 中那样只为 1 个按钮着色?

【问题讨论】:

你试过这个 self.navigationController.navigationItem.rightBarButtonItem.tintColor = [UICOlor thrGreenColor] 吗? iOS7 上的按钮外观和感觉如何与 iOS6 相同,因为现在 iOS7 中的按钮是纯文本按钮?你在为按钮使用背景图片吗? @Kunal 我已经尝试设置 rightBarButtonItem,但没有成功。 而且@AC1 我仍在为 iOS 6 构建应用程序(为了向后兼容),只是在 iOS 7 手机上运行它,所以它们仍然只是普通的 iOS 6 按钮 【参考方案1】:

我认为这已经不可能了,老实说,我认为 Apple 只是无缘无故地完全删除了该功能,并且没有真正提及他们确实这样做了。如果有人看到这个问题并想知道我是如何绕过它的,我只是拍了一张旧按钮的照片并将其用作新按钮的图像。

【讨论】:

【参考方案2】:

这当然非常不寻常,因为您绝对可以提供上述功能。诀窍是修改UIBarButtonItemUIButtontintColor,而不是直接修改到项目上。这是一个实现这个的 ViewController 的简单实现

class ViewController: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()
        navigationItem.rightBarButtonItem = createBarButtonItem()
    

    func createBarButtonItem() -> UIBarButtonItem 
        let button = UIButton(frame: CGRect(origin: CGPointZero, size: CGSize(width: 44, height: 44)))
        button.setTitle("Press Me", forState: .Normal)
        button.addTarget(self, action: "handleButtonTap:", forControlEvents: .TouchUpInside)
        button.tintColor = UIColor.blueColor()
        let buttonItem = UIBarButtonItem(customView: button)
        return buttonItem
    

    func handleButtonTap(button: UIButton) 
        button.tintColor = UIColor.redColor()
    

当然,您会想要管理按钮选择的状态,以便切换颜色,但我让您自己决定

【讨论】:

以上是关于如何为特定的 UIBarButtonItem 着色?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 UIBarButtonItem 实现徽章?

iPhone - 如何为图像着色?

如何为 Git 控制台着色?

如何为滑块(sliderInput)着色?

如何为 System.out.println 输出着色? [复制]

如何为栏按钮添加徽章?