我在我想要在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终止列表,但在我的情况下,它永远不会按照应有的方式工作。我在这里错过了什么吗?
答案 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次单独调用