UIAppearance 协议自定义视图
2017-07-06 16:32
337 查看
在iOS 5以前,自定义原生控件的外观并没有原生支持,因此开发人员感觉很麻烦。开发人员经常面临的问题是修改一个控件所有实例的外观。解决这个问题的正确方法是重写一遍控件。但由于这么做非常费时,一些开发人员开始覆盖或混写一些方法,如drawRect:。
从iOS 5开始,苹果通过两个协议(UIAppearance和UIAppearanceContainer)规范了对许多UIKit控件定制的支持。所有遵循UIAppearance协议的UI控件通过定制都可以呈现各种外观。不仅如此,UIAppearance协议甚至允许开发者基于控件所属的区域指定不同的外观。也就是说,当某个控件包含在特定视图中时,可以指定它的外观(如UIBarButtonItem的tintColor)。也可以获取该控件类的外观代理对象,用该代理定制外观来实现。
+ (instancetype)appearance;
+ (instancetype)appearanceWhenContainedIn:(Class <UIAppearanceContainer>)ContainerClass, ... NS_REQUIRES_NIL_TERMINATION;
第一个方法是统一全部改,比如你设置UINavBar的tintColor,你可以这样写:[[UINavigationBar appearance] setTintColor:myColor];
第二个方法是当出现在某个类的出现时候才会改变:例如:
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], [UIPopoverController class], nil] setTintColor:myPopoverNavBarColor];
注意:全局的设置最好在所有界面初始化前开始设置,否则可能失效。一般写在appDelegate.m文件中。
那么,,怎么确定哪些情况下能够通过UIKit的外观代理来定制所有元素(以及元素中的哪些属性)呢?
有两种方式。老办法是查阅文档,另一个办法是大多数开发人员使用的快捷方式:读头文件。打开对应的UIKit元素的头文件,其中所有带有UI_APPEARANCE_SELECTOR标记的属性都支持通过外观代理来定制。举个例子,UINavigationBar.h中的tintColor属性带有UI_APPEARANCE_SELECTOR标记: @property(nonatomic,retain) UIColor *tintColor UI_APPEARANCE_SELECTOR;
例子: http://blog.csdn.net/shenjx1225/article/details/8552449
从iOS 5开始,苹果通过两个协议(UIAppearance和UIAppearanceContainer)规范了对许多UIKit控件定制的支持。所有遵循UIAppearance协议的UI控件通过定制都可以呈现各种外观。不仅如此,UIAppearance协议甚至允许开发者基于控件所属的区域指定不同的外观。也就是说,当某个控件包含在特定视图中时,可以指定它的外观(如UIBarButtonItem的tintColor)。也可以获取该控件类的外观代理对象,用该代理定制外观来实现。
+ (instancetype)appearance;
+ (instancetype)appearanceWhenContainedIn:(Class <UIAppearanceContainer>)ContainerClass, ... NS_REQUIRES_NIL_TERMINATION;
第一个方法是统一全部改,比如你设置UINavBar的tintColor,你可以这样写:[[UINavigationBar appearance] setTintColor:myColor];
第二个方法是当出现在某个类的出现时候才会改变:例如:
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], [UIPopoverController class], nil] setTintColor:myPopoverNavBarColor];
注意:全局的设置最好在所有界面初始化前开始设置,否则可能失效。一般写在appDelegate.m文件中。
那么,,怎么确定哪些情况下能够通过UIKit的外观代理来定制所有元素(以及元素中的哪些属性)呢?
有两种方式。老办法是查阅文档,另一个办法是大多数开发人员使用的快捷方式:读头文件。打开对应的UIKit元素的头文件,其中所有带有UI_APPEARANCE_SELECTOR标记的属性都支持通过外观代理来定制。举个例子,UINavigationBar.h中的tintColor属性带有UI_APPEARANCE_SELECTOR标记: @property(nonatomic,retain) UIColor *tintColor UI_APPEARANCE_SELECTOR;
例子: http://blog.csdn.net/shenjx1225/article/details/8552449
相关文章推荐
- IOS自定义UI组件的外观——使用UIAppearance协议自定义视图
- IOS自定义UI组件的外观——使用UIAppearance协议自定义视图
- 使用UIAppearance协议自定义视图 UI_APPEARANCE_SELECTOR
- IOS自定义UI组件的外观——使用UIAppearance协议自定义视图
- IOS自定义UI组件的外观——使用UIAppearance协议自定义视图()
- 使用UIAppearance 协议自定义视图
- 使用UIAppearance协议自定义视图
- 使用UIAppearance协议自定义视图
- IOS自定义UI组件的外观——使用UIAppearance协议自定义视图
- iOS 之自定义UI组件的外观——使用UIAppearance协议自定义视图(初识)
- IOS自定义UI组件的外观——使用UIAppearance协议自定义视图
- 14-2 UITabBarController标签视图控制器、配置UITabBar、自定义UITabBarItem、(UIAppearance)、三大视图控制器的综合使用、AdressBook、(+U
- >02 (协议代理)、自定义视图、程序执行顺序(iOS程序启动流程 )、视图控制器、(MVC的理解)
- UI一揽子计划 21 (UICollectionView、SDWebImage第三方类库加载图片的使用、集合视图的布局UICollectionViewFlowLayout 、自定义Cell、布局协议
- 自定义服务器控件开发(3)--视图状态与控件状态
- netty自定义协议
- 解读ASP.NET 5 & MVC6系列(16):自定义View视图文件查找逻辑
- MVC 用扩展方法执行自定义视图,替代 UIHint
- ASP.NET MVC自定义视图引擎
- 一个简单的自定义通信协议(socket)