包含在多个类中的iOS 6外观

时间:2012-09-25 22:27:02

标签: objective-c xcode ios6 uiappearance

我在我想要在iOS 6应用中自定义的某些UI元素上使用appearanceWhenContainedIn方法。我发现的问题是,如果我尝试提供多个容器类,则不会应用任何自定义,如下所示:

// Works neither for toolbar nor navbar items
[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], [UIToolbar class], nil]

// Works fine (but only for navbar items, obviously)
[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil]

官方文档说这个方法的参数可以是多个类的nil终止列表,但在我的情况下,它永远不会按照应有的方式工作。我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:43)

来自文档:

  

<强> appearanceWhenContainedIn:

     

...

     

给定包含中接收器的外观代理   层次结构

这实际上意味着nil-terminated列表不定义UIBarButtonItem的容器类列表,而是从上到下定义容器层次结构,所以

[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], [UIToolbar class], nil]

返回UINavigationBar内的UIBarButtonItem的外观代理,UINavigationBar依次在UIToolbar中。

[[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class],[ViewController class], nil] setTintColor:[UIColor redColor]];

为ViewController类中任何UIToolBar中的UIBarButtonItems设置红色调颜色。

因此,要分别为UINavigationBar和UIToolBar设置外观,您需要对+appearanceWhenContainedIn:方法进行2次单独调用