appearanceWhenContainedIn与UITableView和UINavigationController无法正常工作

时间:2014-04-24 15:18:10

标签: objective-c ios7 uitableview uinavigationcontroller

我创建了一个带有UINavigationController,右边是UIBarButtonItem和UITableView的简单项目。为了测试,我想使用appearanceWhenContainedIn:为UINavigationController橙色上的UIBarButtonItem着色,同时还在UITableView红色中着色UIButtons。单独,每个样式都正常工作。但是当我同时使用它们时,它不起作用。为什么?

场景1(UINavigationController中的颜色UIBarButtonItem):

[[UIBarButtonItem 
    appearanceWhenContainedIn:[UINavigationController class], nil] 
        setTintColor:[UIColor orangeColor]];

enter image description here


场景2(UITableView中的颜色UIButton):

[[UIButton 
    appearanceWhenContainedIn:[UITableView class], nil] 
        setTintColor:[UIColor redColor]];

enter image description here


场景3(合并它们):

[[UIButton 
    appearanceWhenContainedIn:[UITableView class], nil] 
        setTintColor:[UIColor redColor]];
[[UIBarButtonItem 
    appearanceWhenContainedIn:[UINavigationController class], nil] 
        setTintColor:[UIColor orangeColor]];

enter image description here


可以通过以下链接下载示例项目:https://www.dropbox.com/s/k7nabaqc9oso907/AppBugTesting.zip

更新 当我继续诊断问题时,我发现如果我使用UIButton的“setBackgroundColor”而不是setTintColor,它会向UIBarButtonItem显示红色背景橙色色调。由于某些原因,着色两者都不起作用......仍然不确定原因。

3 个答案:

答案 0 :(得分:2)

这有效:

[[UIButton 
    appearanceWhenContainedIn:[UITableView class], nil] 
        setTintColor:[UIColor redColor]];
[[UINavigationBar 
    appearanceWhenContainedIn:[UINavigationController class], nil] 
        setTintColor:[UIColor orangeColor]];

当然,这可能会使其他一些事情变成橙色,而你并不打算这样做。

答案 1 :(得分:1)

我会创建“空”UITableViewUINavigationController子类来引用,以避免意外更改其他按钮的外观。

[[UIButton 
    appearanceWhenContainedIn:[MyTableView class], nil] 
        setTintColor:[UIColor redColor]];
[[UINavigationBar 
    appearanceWhenContainedIn:[MyNavigationController class], nil] 
        setTintColor:[UIColor orangeColor]];

答案 2 :(得分:0)

根据Apple的文档:

  

iOS 7不支持使用外观代理API设置tintColor属性。

来源: https://developer.apple.com/library/ios/documentation/userexperience/conceptual/transitionguide/AppearanceCustomization.html