我在想要在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结尾的多个类的列表,但在我的例子中,它永远不会以它应该的方式工作。我是不是漏掉了什么?
发布于 2012-09-26 06:44:09
从文档中:
appearanceWhenContainedIn:
..。
给定包含层次结构中接收方的外观代理。
这实际上意味着以nil结尾的列表定义的不是UIBarButtonItem的容器类列表,而是从上到下的容器层次结构,因此
[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], [UIToolbar class], nil]
返回位于UINavigationBar内部的UIBarButtonItem的外观代理,而UINavigationBar又位于UIToolbar内部。
或
[[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class],[ViewController class], nil] setTintColor:[UIColor redColor]];
为ViewController类中任何UIBarButtonItems中的UIToolBar设置红色色调。
因此,要分别设置UINavigationBar和UIToolBar的外观,需要对+appearanceWhenContainedIn:
方法进行两次单独的调用
https://stackoverflow.com/questions/12592025
复制相似问题