介绍两种监听的方法的使用
1、第一种监听文本(UITextField、UITextView)文本信息的变化
1》获取监听中心
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
2》监听相应的文本
***监听文本开始编辑,调用对应方法
UITextFieldTextDidBeginEditingNotification;
***监听文本结束编辑,调用对应方法
UITextFieldTextDidEndEditingNotification;
***监听文本内容变化,调用对应方法
UITextFieldTextDidChangeNotification;
**当文本内容一发生变化就调用textChange方法
[center addObserver:self selector:@selector(textChange)name:UITextFieldTextDidChangeNotification object:self.usernameText];
3》当文本内容发生变化调用textChange方法
- (void)textChange
2、通过监听从view向Controller发送信息
该情况用在当UITextField、UITextView 在一个自定义的view中的时候,文本的内容发生改变需要将文本信息发送给Controller ,可以通过代理,block等方法实现,但当“分层”较多的时候使用上述方法会比较麻烦,因此使用监听来传递信息
1》获取监听中心并发送监听
几个参数:
name:发送的监听的名字,方便控制器通过该名字获取到监听——一般情况下定义为宏 并根据系统的命名方式进行命名 如:#define yzLoginTextDidChangeNotification @"yzLoginTextDidChangeNotification"
object:发送监听的对象 nil
userInfo:监听中需要传递出去的内容 保存在字典中,字典的key值一般也定义为宏,方便控制器通过key值获取文本信息 如:
#define yzNameText @
"yzNameText"
2》发送一个监听
[[NSNotificationCenter defaultCenter]postNotificationName:yzLoginTextDidChangeNotification object:niluserInfo:@{yzNameText:self.usernameText.text,yzPswText:self.pswText.text}];
3》在控制器中获取监听
在控制器中根据name获取监听(控制器监听文本内容的变化并获取)
[[NSNotificationCenter defaultCenter]addObserver:selfselector:@selector(textChange:) name:yzLoginTextDidChangeNotification object:nil];
4》文本信息发生改变调用这个方法
调用该方法会将
NSNotification 传递出来,根据宏定义的key 获取 对应文本的改变后的内容
- (void)textChange:(NSNotification *)note
{
self.username = note.userInfo[yzNameText];
{
self.username = note.userInfo[yzNameText];
self.psw = note.userInfo[yzPswText];
}
可以通过这种方式快速的获取一个view中文本信息的改变,并且保证了一个控件良好的封装性