美文网首页
iOS----通知

iOS----通知

作者: PlatonsDream | 来源:发表于2016-04-26 20:50 被阅读91次

    监听下一个页面传回来的广播,修改当前页面的标题名称

    播放广播

    secondViewController.h
    
    typedef void(^sendValue)(NSString *valueStr);
    @interface SecondViewController : UIViewController
    //copy修饰,将block从栈区拷贝到到堆区,方便管理内存(因为在堆区才可以手动的管理内存)
    @property (nonatomic, copy) sendValue sendValueBlock;
    
    //播放 一条广播
        [[NSNotificationCenter defaultCenter] postNotificationName:@"test" object:self.myTextField.text userInfo:@{@"title":self.myTextField.text}];
        //block 传值,block的调用。那个类需要text的值,就在那个类中实现block
        self.sendValueBlock(self.myTextField.text);
    
    

    [NSNotificationCenter defaultCenter] //广播中心

    接收广播, 把self设置成一个观察者

    RootViewController.m
    
    [NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveNotifi:) name:@"test" object:nil];
    
    //实现block方法
        secondVC.sendValueBlock = ^(NSString *value){
            
            self.navigationItem.title = value;
        };
    

    [NSNotificationCenter defaultCenter] //通知中心,播放、监听所有的广播

    Observer:self 监听广播的人,这里是self
    第二个参数:方法选择器,收到广播时候的回调方法,可以不带参数,也可以带参数。如果带参数,参数的类型为广播类型(NSNotification *)
    name:广播的名称,便于监听广播的人,使用name查找广播
    object:标记。如果想要监听所有的广播内容,那么赋值为nil

    广播接收后回调方法

    - (void)receiveNotifi:(NSNotification *)notification {
        
        NSLog(@"object---%@", notification);
        NSLog(@"userInfo----%@", notification.userInfo);
        
        self.navigationItem.title = [notification.userInfo objectForKey:@"title"];
    }
    

    notification是接收到的广播,类型为NSNotification *
    接收广播后根据键的值获取标题名称

    最后,把监听对象销毁

    //RootViewController.m
    - (void)dealloc {
     [[NSNotificationCenter defaultCenter] removeObserver:self];
    }
    

    相关文章

      网友评论

          本文标题:iOS----通知

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