在2011年的科技讲座上,我看到了一篇关于新的UIAppearance 协议的演讲。目前还没有太多的文档。我将在短期内总结我所记得的内容,以解释我的问题从何而来:
关于UIAppearance**:** UIAppearance**:**的
到目前为止,您必须自定义每个导航栏(工具栏等)。属性出现在所有应用程序视图控制器中。使用新的外观属性,您只能在一个位置对应用程序中的所有导航条执行此操作。例如:如果您想自定义导航条背景图像,可以这样做:
[[UINavigationBar appearance] setBackgroundImage:
[UIImage imageNamed:@"MyImageName"] forBarMetrics:UIBarMetricsDefault]; 这将设置应用程序中所有导航条的背景图像。使用barMetrics,您可以指定是否希望图像也在景观模式中使用。
如果您希望指定仅在某些视图控制器中应用的外观,那么在文档中也有一个方法通过指定对象的位置来控制它:
[[UIBarButtonItem appearanceWhenContainedIn:
[ABPeoplePickerNavigationController class], nil] setTintColor:myNavBarColor];同样值得一提的是,如果您有一个自定义实例,与您的外观设置不同,这些实例将不会受到外观代理的影响。
几个问题:
a)如何知道类的哪些属性与外观属性一起工作?,例如,由于UITableView符合UIAppearance协议,所以我认为我可以这样做
[[UITableView appearance] setBackgroundColor:mytableViewColor];操作所有表视图的背景色,但我做不到!
b)是否有一个所有类的列表,可以对外观属性进行操作?
( c)在什么时候调用外观自定义?I希望进行更改,在运行时抛出外观属性,但不幸的是,更改没有发生。
发布于 2011-11-24 20:14:29
如何知道类的哪个实例与外观属性一起工作?例如,由于UITableView符合UIAppearance协议,所以我想我可以这样做
您可以查看类的头(以及所有超类的头)。任何在它旁边有UI_APPEARANCE_SELECTOR的方法都支持与UIAppearance代理一起使用。
[[UITableView appearance] setBackgroundColor:mytableViewColor];backgroundColor属性没有在UIView.h中使用UI_APPEARANCE_SELECTOR进行修饰。因此,技术上不支持在外观代理中使用它。它可能会起作用,但(考虑到缺乏方法装饰)并不一定会起作用。
来自UIAppearance Protocol Reference
为了支持外观定制,类必须符合
UIAppearanceContainer协议,相关的访问器方法必须标记为UI_APPEARANCE_SELECTOR。
(注:“和相关访问器方法必须标记为.”增加的重点)
( b)是否有可用外观属性操作的所有属性的列表?
是否有一个页面显示与外观代理一起工作的每个setter?我不知道其中一个,也没有在运行时构建列表的方法。
( c)在什么时候调用外观定制?我希望在运行时进行更改,抛出外观属性,但不幸的是,更改没有发生。
您可以在执行过程中的任何点使用外观代理。在下一次调用这些视图的-layoutSubviews方法之前,这些更改不会应用于受影响的视图。
发布于 2011-11-24 14:50:11
UIAppearance记录在每个类的头中。看看里面是否有标记为UI_APPEARANCE_SELECTOR的方法。这些是您可以通过外观代理调用的方法。我不知道在标题之外有一个列表。
外观自定义在通过代理之后立即调用,每当构造新对象时也是如此。但这只适用于标记为该UI_APPEARANCE_SELECTOR的方法。
发布于 2011-11-24 14:50:21
答:下面一行
[[UITableView appearance] setBackgroundColor:[UIColor blueColor]];会让每一张桌子都变成蓝色!刚刚在iOS 5模拟器上测试过。
b: UIAppearance应该在UIView上的每个属性上工作。UIView的所有子类都符合UIAppearance Protocol
c:我认为大多数人都会创建一个类和或方法来定制外观并调用它:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
类似于:[ApplicationAppearance setApplicationSchemaTo:ASchemaBlue];
编辑:
例如,UIBarButtonItem定义了以下方法: @属性(非原子,保留) UIColor *tintColor UI_APPEARANCE_SELECTOR;
来自UIAppearanceContainer协议参考
在UIBarButtonItem类引用中定义了tintColor
@属性(非原子,保留) UIColor *tintColor
但是在UIBarButtonItem.h中定义:
@property(nonatomic,retain) UIColor *tintColor __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0) UI_APPEARANCE_SELECTOR;我认为这些文件不是最新的。
https://stackoverflow.com/questions/8257556
复制相似问题