NSNotificationCenter较之于 Delegate 可以实现更大的跨度的通信机制,可以为两个无引用关系的两个对象进行通信。
最主要的两个类:NSNotificationCenter & NSNotification
NSNotificationCenter :通知中心 是一个单例
NSNotification:通知对象,里面有通知的信息
@property (readonly, copy) NSNotificationName name;
@property (nullable, readonly, retain) id object;
@property (nullable, readonly, copy) NSDictionary *userInfo;
此处有Demo 模拟两个界面之间的逆向传值
1. 注册通知
#import "ViewController"
//注册通知(单例对象)
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
/*
第一个参数:发送通知是回调用哪个对象的方法
第二个参数:发送通知时会调用哪个方法
第三个参数:通知的名字(唯一性)
第四个参数:会接收哪个对象发送的通知(如果传nil,表示接收所有的通知)
*/
[nc addObserver:self selector:@selector(notiAction:) name:@"TransferValue" object: nil ]; //nil,表示接收所有的通知 无论是谁发来的,name为“TransferValue”的通知都会接收
FirstViewController *ctrl = [[FirstViewController alloc]init];
[nc addObserver:self selector:@selector(notiAction:) name:@"TransferValue" object:ctrl.textfield]; //这里第四个参数传的是ctrl.textfield,也就是说 只有ctrl.textfield发送来的通知才会接收
#import "FirstViewController"
#pragma mark - UITextField代理
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
//传值(通知中心)
//发送通知
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
/*
第一个参数:通知的名字
第二个参数:发送通知的对象
第三个参数:传递的一些参数值
*/
NSDictionary *dict = @{@"myText":textField.text,@"hehe":@"memeda"};
[nc postNotificationName:@"TransferValue" object:nil userInfo:dict];
//退回第一个界面
[self dismissViewControllerAnimated:YES completion:nil];
return YES;
}
网友评论