iOS 进阶 第六天(0402)
0402
通知和代理的区别
- 代理是一对一的,只能是调用实现了协议里的方法,对象作为实现了该方法才能执行方法
- 通知是多对多,它是通过通知中心分发
- 通知要及时移除,如果不及时移除可能会收到多次通知,就好像C#中的事件注册多次一样.也可能(通知中心不会保留被通知的对象)是被通知的对象已经销毁,但通知中心仍保留这个通知继续通知造成野指针错误,应用可能会崩溃.
- 同时的添加和移除很容易和KVO混在一起,只要注意addObserver和removeObserver的时候不选择forKeyPath就可以了.
下图是个代码实例:
移除通知:注意KVO
键盘通知
- UIDevice的一些通知,如下图:
- 键盘通知
文本框的处理
问题1:在文本框UITextView里,光标默认贴靠在最左端,又是需要让光标离开一些距离,此时该怎么办呢?
答:UITextView没有UIEdgeInset属性,所以不能通过设置内边距来设定.UITextView有个leftView成员,再配合leftViewModel为UITextFieldViewModelAlways,这样就可以放一个有宽度没背景色的UIView就可以了.
问题2:既然出现了文本框,则键盘弹出右下角的文字标识肯能就要改一改,该如何改呢?
答:每个文本框UITextView都有一个ReturnKey的属性,在那里可以设置.如果要改成自己想要的问题则需要其他知识准备. 注意:UITextView还有一个Auto-enbale Retuen Key的属性,用来决定键盘右下角按钮的可用性.
问题3:如何监听文本框UITextView的回车事件
答:使用代理,如下图: