我创建了一个带有UINavigationController,右边是UIBarButtonItem和UITableView的简单项目。为了测试,我想使用appearanceWhenContainedIn:为UINavigationController橙色上的UIBarButtonItem着色,同时还在UITableView红色中着色UIButtons。单独,每个样式都正常工作。但是当我同时使用它们时,它不起作用。为什么?
场景1(UINavigationController中的颜色UIBarButtonItem):
[[UIBarButtonItem
appearanceWhenContainedIn:[UINavigationController class], nil]
setTintColor:[UIColor orangeColor]];
场景2(UITableView中的颜色UIButton):
[[UIButton
appearanceWhenContainedIn:[UITableView class], nil]
setTintColor:[UIColor redColor]];
场景3(合并它们):
[[UIButton
appearanceWhenContainedIn:[UITableView class], nil]
setTintColor:[UIColor redColor]];
[[UIBarButtonItem
appearanceWhenContainedIn:[UINavigationController class], nil]
setTintColor:[UIColor orangeColor]];
可以通过以下链接下载示例项目:https://www.dropbox.com/s/k7nabaqc9oso907/AppBugTesting.zip
更新 当我继续诊断问题时,我发现如果我使用UIButton的“setBackgroundColor”而不是setTintColor,它会向UIBarButtonItem显示红色背景和橙色色调。由于某些原因,着色两者都不起作用......仍然不确定原因。
答案 0 :(得分:2)
这有效:
[[UIButton
appearanceWhenContainedIn:[UITableView class], nil]
setTintColor:[UIColor redColor]];
[[UINavigationBar
appearanceWhenContainedIn:[UINavigationController class], nil]
setTintColor:[UIColor orangeColor]];
当然,这可能会使其他一些事情变成橙色,而你并不打算这样做。
答案 1 :(得分:1)
我会创建“空”UITableView
和UINavigationController
子类来引用,以避免意外更改其他按钮的外观。
[[UIButton
appearanceWhenContainedIn:[MyTableView class], nil]
setTintColor:[UIColor redColor]];
[[UINavigationBar
appearanceWhenContainedIn:[MyNavigationController class], nil]
setTintColor:[UIColor orangeColor]];
答案 2 :(得分:0)
根据Apple的文档:
iOS 7不支持使用外观代理API设置tintColor属性。