关于如何自定义一个 文本输入框(UITextView) 的思想以及整个操作流程
2015-10-18 09:36
585 查看
随口
怎么去学一个新的类,看他继承谁,看他的属性都有什么作用,隐藏属性是什么。每更新一个Xcode 就会有新的知识,研究一个自己的一套学习方法,多思考,类的属性在哪里可以用到
合格的自定义控件只需要外部给你数据就可以来,不需要关心你内部是怎么实现的。
1. 文本输入框有哪些选择 为什么要选择继承UITextView
用油文本输入功能的目前有UITextField 和 UITextView ,总结一下两个控件的特点,UITextView 换行比较方便,占位符可以自定义。2.作为一个自定义控件应该考虑的情况是哪些?
1.>给别人提供什么借口,别人使用你这个控件时会使用的方法和属性2.>当别人使用你控件属性时,应该直接改变控件属性值,重写 属性set 方法。
3.>使用控件父类属性时,不会调用重绘方法。出现文字重叠现象,所以需要重写 父类一些属性的set方法,比如text,font;
3.控件的使用注意事项?
1.>监听控件行为时,注意不要让 控件的代理是它自己<self.delegate = self>,这句话随时可以当外部调用delegate时,内部空间的代理就挂掉了;另外,使用代理对象是自己,这个设计本身不合理。
2.> 需要知道 [self setNeedsDisplay] 方法是做什么的, 会调用 - (void)drawRect:(CGRect)rect 方法重绘
4.自定义文本输入框控件的完整流程。
1.>提供给外部可以改变自己占位符的文字属性 和占位符颜色的属性 字体可以使用外部字体大小2.> 使用 画图 将占位符文字画出来 ,注意这里需要判断 文本框上面是否 有文字,,可以根据 UITextView.hasText 属性 和 self.text.length
使用 drawInRect: withAttributes: 方法 将 文字输入范围限制在一定范围内
self.font 需要一个默认字体,跟color一样
3.> 使用通知 监听 文本框的文字输入状态 在文字输入时 重新调用绘图方法 [self setNeedsDisplay];
4.>重写属性set 方法,在外部改变控件属性时,应该第一时间改变自身属性值;重写set 方法 注意要重新调用一次 绘图方法
5.>当调用控件父类属性时,不会出现重绘方法,所以 我们需要重写 父类的一些属性 set方法
4.注意事项
1.>[self setNeedsDisplay] 会在下一次消息循环中调用 - (void)drawRect:(CGRect)rect 方法,重复多次调用是没有用的。每消息循环一次,才会调用一次。NSRunLoop 消息循环
2.>通知需要移除
相关文章推荐
- Android requires compiler compliance level 5.0 or 6.0. Found '1.4' instead的解决办法
- Win10 Build 10565快速预览版为什么有ISO镜像下载地址?
- 手势识别(UIGestureRecognizer)
- easyui-datagrid个人实例
- LeetCode Longest Consecutive Sequence
- easyui-layout个人实例
- easyui-combotree个人实例
- easyui-combotree个人实例
- N-Queens II 解答
- N-Queens 解答
- StringBuffer与StringBuilder原理与区别
- Hibernate中单向一对多,单向多对一,双向一对多 inverse="true" casecade="save-update"的理解
- Mod 与 RequireJS/SeaJS 的那些事
- Permutation Sequence 解答
- android多分辨率多屏幕密度下UI适配方案
- 2015 NEERC F. Gourmet and Banquet
- 控制器管理UINavigationController、UINavigationBar
- UIScrollView
- 物理引擎UIDynamic
- 呈现样式UIModalPresentation