NSNotificationCenter

2017-09-06  本文已影响0人  小小白衣

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;

}


上一篇下一篇

猜你喜欢

热点阅读