UIAppearance与UI_APPEARANCE_SELECTOR

在iOS 5之后,出现了两个Protocol,分别是UIAppearance 以及UIAppearanceContainer,通过这两个协议,我们可以在开发过程中规范对于UI的定制工作。

使用这两个Protocol,不仅可以简单更改定制各种外观样式,甚至还能制定出现在特定位置的时候才允许设置不同的UI外观特性。

UIAppearance Protocol主要使用一下两个方法:

+ (instancetype)appearance;
+ (instancetype)appearanceWhenContainedIn:(nullable Class <UIAppearanceContainer>)ContainerClass, ... NS_REQUIRES_NIL_TERMINATION NS_DEPRECATED_IOS(5_0, 9_0, "Use +appearanceWhenContainedInInstancesOfClasses: instead") __TVOS_PROHIBITED;

iOS 9之后,第二个方法替换为:
+ (instancetype)appearanceWhenContainedInInstancesOfClasses:(NSArray<Class <UIAppearanceContainer>> *)containerTypes NS_AVAILABLE_IOS(9_0);

使用之后,返回值接受者为使用此方法的实例,很多的UIView或者UIControl的属性都支持此项操作,比如 UIButton的TitleColor

- (void)setTitleColor:(nullable UIColor *)color forState:(UIControlState)state UI_APPEARANCE_SELECTOR; // default if nil. use opaque white

以及UIview的BackgroundColor

@property(nullable, nonatomic,copy)            UIColor          *backgroundColor UI_APPEARANCE_SELECTOR; // default is nil. Can be useful with the appearance proxy on custom UIView subclasses.

上面两个例子,大家可以看出,只有标记了UI_APPEARANCE_SELECTOR宏定义的方法,才会遵循UIAppearance Protocol,并允许使用协议方法。

使用范例:

[[UINavigationBar appearance] setBarTintColor:myNavBarBackgroundColor];

或者

[[UIBarButtonItem appearanceWhenContainedIn:[NSArray arrayWithObject:[UINavigationBar class]]
   setBackgroundImage:[UIImage imageNamed:@"imageName"] forState:state barMetrics:metrics];

只要是遵循了UIAppearanceContainer Protocol的类,比如UINavigatorBarUIPopOverController等,都是此容器类,可以使用协议中的方法。

参考资料:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,263评论 30 472
  • 1 UI设计基础 1.1 为iOS而设计 1.1.1 iOS包含以下3条设计原则: 遵从,UI应该有助于人们理解内...
    Willry阅读 3,716评论 1 48
  • 王小波的杂文《沉默的大多数》。文中提到,周围的世界太过荒诞,所以暗下决心保持沉默。王小波经历了喧嚣暴烈的文革,感受...
    包云东阅读 1,017评论 0 2
  • 也许,在世界的某个地方也有那么一个就是你一直寻找的人。不知不觉,也许你一直在寻找,当你真地遇到了,看到的一刻,也许...
    茶幺阅读 232评论 0 1
  • 不管在工作还是生活中,我身上一直有个标签是:有亲和力,或者说是人缘好。今天听了grace的分享豁然开朗,其实所...
    宋微微阅读 252评论 1 2