如何为特定的 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】:这当然非常不寻常,因为您绝对可以提供上述功能。诀窍是修改UIBarButtonItem
的UIButton
的tintColor
,而不是直接修改到项目上。这是一个实现这个的 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 着色?的主要内容,如果未能解决你的问题,请参考以下文章