我们扩展了UILabel,以便在我们的应用程序中为给定标签类型的所有用途应用标准字体和颜色.例如.
@interface UILabelHeadingBold : UILabel @end
在AppDelegate中,我们应用这样的字体和颜色
[[UILabelHeadingBold appearance] setTextColor:<some color>]; [[UILabelHeadingBold appearance] setFont:<some font>];
在我们的XIB中添加UILabel时,现在我们可以选择类别为UILabelHeadingBold的类,并且可以按预期工作.标签显示为正确的字体和颜色,如我们的AppDelegate中指定的.
但是,如果我们以编程方式创建标签,例如.
UILabelHeadingBold *headingLabel = [[UILabelHeadingBold alloc] initWithFrame:CGRectMake(10,10,100,30)]; [self.mainView addSubview:headingLabel];
UILabel没有获得应用的预期字体/颜色.我们必须手动应用这些属性.
有没有办法使UIAppearance在编程创建的UI元素上生效,还是仅在XIB中使用时才起作用?
解决方法
从苹果文档:
To support appearance customization,a class must conform to the
UIAppearanceContainer protocol and relevant accessor methods must be
marked with UI_APPEARANCE_SELECTOR.
例如在UINavigationBar.h中,tintColor标有UI_APPEARANCE_SELECTOR
@property(nonatomic,retain) UIColor *tintColor UI_APPEARANCE_SELECTOR;
但是在UILabel.h中,您可以看到textColor和font属性没有被标记为UI_APPEARANCE_SELECTOR,但是在Interface Builder中添加时,它可以工作.