美文网首页
NSNotificationCenter

NSNotificationCenter

作者: 小小白衣 | 来源:发表于2017-09-06 16:16 被阅读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;

    }


    相关文章

      网友评论

          本文标题:NSNotificationCenter

          本文链接:https://www.haomeiwen.com/subject/uccvjxtx.html