登录
|
注册
|
QQ账号登录
|
常见问题
联系我们:
我要上传
首页
浏览
幼儿/小学教育
中学教育
高等教育
研究生考试
外语学习
资格/认证考试
论文
IT计算机
经济/贸易/财会
管理/人力资源
建筑/环境
汽车/机械/制造
研究报告
办公文档
生活休闲
金融/股票/期货
法律/法学
通信/电子
医学/心理学
行业资料
文学/艺术/军事/历史
我的淘豆
我要上传
帮助中心
复制
下载此文档
设计一个-iOS-控件(iOS-控件完全解析).docx
文档分类:
IT计算机
|
页数:约41页
举报非法文档有奖
分享到:
1
/
41
下载此文档
搜索
下载此文档
关闭预览
下载提示
1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
2.下载该文档所得收入归上传者、原创者。
3.下载的文档,不会出现我们的网址水印。
同意并开始全文预览
(约 1-6 秒)
下载文档到电脑,查找使用更方便
下 载
还剩?页未读,
继续阅读
分享到:
1
/
41
下载此文档
文档列表
文档介绍
设计一个-iOS-控件(iOS-控件完全解析).docx
如何设计一个 iOS 控件(iOS 控件完全解析)
代码的等级:可编译、可运行、可测试、可读、可维护、可复用
前言
一个控件从外在特征来说,主要是封装这几点:
交互方式
显示样式
数据使用
对外在特征的ame];
return self;
}
这样当用户从代码里初始化你的控件的时候,就总是逃脱不了你需要执行的初始化代码了,哪怕用户直接调用 init 方法,最终还是会回到父类的 Designated Initializer 上。
从 xib 或 storyboard 中加载
当控件从 xib 或 storyboard 中加载的时候,情况就变得复杂了,首先我们知道有 initWithCoder 方法,该方法会在对象被反序列化的时候调用,比如从文件加载一个 UIView 的时候:
UIView *view = [[UIView alloc] init];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:view];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"KeyView"];
[[NSUserDefaults standardUserDefaults] synchronize];
data = [[NSUserDefaults standardUserDefaults] objectForKey:@"KeyView"];
view = [NSKeyedUnarchiver unarchiveObjectWithData:data];
NSLog(@"%@", view);
执行 unarchiveObjectWithData 的时候, initWithCoder 会被调用,那么你有可能会在这个方法里做一些初始化工作,比如恢复到保存之前的状态,当然前提是需要在 encodeWithCoder 中预先保存下来。
不过我们很少会自己直接把一个 View 保存到文件中,一般是在 xib 或 storyboard 中写一个 View,然后让系统来完成反序列化的工作,此时在 initWithCoder 调用之后,awakeFromNib 方法也会被执行,既然在 awakeFromNib 方法里也能做初始化操作,那我们如何抉择?
一般来说要尽量在 initWithCoder 中做初始化操作,毕竟这是最合理的地方,只要你的控件支持序列化,那么它就能在任何被反序列化的时候执行初始化操作,这里适合做全局数据、状态的初始化工作,也适合手动添加子视图。
awakeFromNib 相较于 initWithCoder 的优势是:当 awakeFromNib 执行的时候,各种 IBOutlet 也都连接好了;而 initWithCoder 调用的时候,虽然子视图已经被添加到视图层级中,但是还没有引用。如果你是基于 xib 或 storyboard 创建的控件,那么你可能需要对 IBOutlet 连接的子控件进行初始化工作,这种情况下,你只能在 awakeFromNib 里进行处理。同时 xib 或 storyboard 对灵活性是有打折的,因为它们创建的代码无法被继承,所以当你选择用 xib 或 storyboard 来实现一个控件的时候,你已经不需要对灵活性有很高的要求了,唯一要做的是要保证用户一定是通过 xib 创建的此控件,否则
可能是一个空的视图,可以在 initWithFrame 里放置一个 断言 或者异常来通知控件的用户。
最后还要注意视图层级的问题,比如你要给 View 放置一个背景,你可能会在 initWithCoder 或 awakeFromNib 中这样写:
[self addSubview:]; // 通过懒加载一个背景 View,然后添加到视图层级上
你的本意是在控件的最下面放置一个背景,却有可能将这个背景覆盖到控件的最上方,原因是用户可能会在 xib 里写入这个控件,然后往它上面添加一些子视图,这样一来,用户添加的这些子视图会在你添加背景之前先进入视图层级,你的背景被添加后就挡住了用户的子视图。如果你想支持用户的这种操作,可以把 addSubview 替换成 insertSubview:atIndex:。
同时支持从代码和文件中加载
如果你要同时支持 initWithFrame 和 initWithCoder ,那么你可以提供一个 commonInit 方法来做统一的初始化:
- (id)initWithCoder:(NSCoder *)aDeco
设计一个-iOS-控件(iOS-控件完全解析) 来自淘豆网m.daumloan.com转载请标明出处.
猜你喜欢
C公司全面预算管理研究
2页
A食品公司薪酬管理优化研究综述报告
2页
Al0.3CrFe1.5MnNix高熵合金组织与性能研究
2页
波特的管理思想
41页
沥青及其种类
4页
小学第十周国旗下讲话稿
4页
就业指导课心得体会模板
5页
我们小学作文【6篇】
8页
担保书经典范例(3篇)
6页
撤销注册商标复审申请书
2页
汽车用户购买行为分析
60页
2025年感恩节主题演讲稿700字(合集15篇)
32页
2024年商贸旅游系副主任竞争上岗演讲稿范文(三..
6页
2025年感恩书信作文(精选26篇)
39页
2025年感受到痛作文初二(精选18篇)
25页
相关文档
更多>>
非法内容举报中心
文档信息
页数
:
41
收藏数
:
0
收藏
顶次数
:
0
顶
上传人
:
科技星球
文件大小
:
4.98 MB
时间
:
2022-03-20
相关标签
ios设计规范
ios规范
ios界面设计规范
ios通知
ios算法
ios面试题
ios本地通知
ios移除通知
ios代码规范
ios图标规范
计算机原理
PHP资料
linux/Unix相关
C/C++资料
Java
.NET
windows相关
开发文档
管理信息系统
软件工程
网络信息安全
网络与通信
图形图像
行业软件
人工智能
计算机辅助设计
多媒体
软件测试
计算机硬件与维护
网站策划/UE
网页设计/UI
网吧管理
电子支付
搜索引擎优化
服务器
电子商务
Visual Basic
数据挖掘与模式识别
数据库
Web服务
网络资源
Delphi/Perl
Python
CSS/Script
Flash/Flex
UML理论/建模
并行计算/云计算
嵌入式开发
计算机应用/办公自动化
数据结构与算法
SEO
最近更新
员工专业解除劳动合同书
丰田工业大数据中的人机交互设计-深度研究
云计算平台优化资源配置-深度研究
云游戏安全架构优化-深度研究
基于聚多巴胺沉积的聚丙烯微孔膜抗污染表面..
基于等磨损约束的枞树型轮槽铣刀几何参数优..
基于儿童游憩需求的北京通学空间设计策略研..
A集团财务共享中心运营优化研究
基于电化学与光学比色原理的水环境重金属自..
基于激光测距的三维彩色成像的设计与实现
基于模糊数学方法的义乌市水资源安全研究
基于智能终端的养殖场监管平台设计与实现
基于数字图像的岩体结构面参数解译与网络模..
基于性状的黄土高原草地生物多样性与生态系..
基于嵌入式Web技术的温室环境在线监测与控制..
基于大数据的互联网金融创新模式应用研究综..
基于地方高校视域的教学团队建设探讨
基于双层优化策略的过程工艺与控制系统集成..
基于信誉机制的无线传感器网络恶意节点检测..
基于互联网金融的货币市场基金研究——以余..
2025年抖音上很火的生日句子(精选6篇)
2025年抒情优美伤感句子(共6篇)
2025年把年岁过成一杯温水散文(精选9篇)
2025年技术部门员工个人总结(汇总11篇)-大..
2025年技术工作心得体会(精选5篇)
2025年找春天说课稿(集锦16篇)
基于SOA的某大学干部教育培训系统设计与实现..
2025年托福新人经验(锦集11篇)
2025初二上学期数学老师的工作计划
基于PLC的PID控制系统
在线
客服
微信
客服
意见
反馈
手机
查看
返回
顶部