我正在对某些ui元素使用appearanceWhenContainedIn方法,我想在ios 6应用程序中自定义这些元素。我发现的问题是,如果我尝试提供多个容器类,则不会应用任何自定义,例如:

// 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结尾的list定义的不是uibarbuttonem的容器类列表,而是从上到下的容器层次结构,因此

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

返回位于uinavigationbar内的uibarbuttonem的外观代理,而uinavigationbar又位于uitoolbar内。

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

为viewcontroller类中任何uitoolbar中的uibarbuttonems设置红色。
因此,要分别设置uinavigationbar和uitoolbar的外观,需要对+appearanceWhenContainedIn:方法进行两次单独调用

关于objective-c - 包含在多个类中时,iOS 6的外观,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12592025/

10-10 21:08