在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
相关推荐
这是一款非常实用的自定义视图管理事件清除工具。
创建全新的视图将满足我们独特的UI需求。 本文介绍在指南针开发中会用到的罗盘的界面UI,通过继承View类实现的自定义视图,以此来深刻了解自定义视图。
自定义视图初识,自定义视图,需要做哪些准备,自定义视图如何自定义属性,自定义视图如何引用自定义属性
这是一个示例应用程序,它使用 Android 旋转传感器并使用自定义视图(姿态指示器,又名“人工地平线”)显示设备旋转(俯仰/滚动)。 它显示了以下 Android 功能的正确使用: 监控旋转矢量传感器(但仅在活动可见...
较为典型的ios自定义视图 自定义视图多用来呈现出现频率较高的视图
MVC自定义视图引擎源码 功能介绍: 自定义视图引擎。本源码介绍ASP.NET MVC应用程序生成视图的原理, 然后引入一个StringTemplate模板引擎来帮助我们生成视图,最后使 用ASP.NET MVC提供的接口自定义一个视图引擎...
一个数据加载状态的Android自定义视图
自定义视图上下无限循环滚动
Android循环轮播视图控件。 因为发现目前大部分轮播控件只能显示一张图片,在此前一个项目中,遇到轮播的内容里除了广告图片之外,还有文本、图文混合等各种视图,于是自己做了一个可以在同一个轮播控件里同时播放...
* @param customViewArr 自定义视图的数组(需自己定义每个视图的Frame) * @param direction 轮播方向 * @param timeInterval 轮播时间的间隔 * @param view 轮播视图的父视图 * @param show 是否显示...
介绍自定义视图的交互事件 自定义点击事件 详细见http://blog.csdn.net/a87b01c14/article/details/50377839
Androi自定义视图DEMO(代码注释详细)
自定义视图: 在CWinApp::Initlnstance里定义CMultiDocTemplate 视图窗口分割: 在CView::OnCreateClienet里划分窗口 窗口大小、样式的改变: 在PreCreateWindow绘图,改变cs可以做到。 在视图客户区绘图: ...
这个是演示如何自定义视图和属性的demo,全部都是非常简单的操作原理。
android中自定义视图view的讲解,有很多现有的例子可以进行使用,非常方便
今天小编就为大家分享一篇在django admin中添加自定义视图的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
自定义alertView;支持带图标,自定义视图的alertView
自定义弹出视图-demo自定义弹出视图-demo
SpringMVC自定义多视图,多视图实现
自定义Dialog的各种样式,包括自定义视图、PopupWindow,相关博文:http://www.cnblogs.com/tianzhijiexian/p/3867731.html