美文网首页
iOS 通知

iOS 通知

作者: 达_Ambition | 来源:发表于2018-06-15 15:47 被阅读44次
iOS 通知传参使用方法
尽量不要在viewWillDisappear:方法中移除通知
iOS通知传值的使用
1、对NSNotification使用的认识

通知中心传值,可以跨越多个页面传值, 一般也是从后面的页面传给前面的页面。
1. 在第一个界面建立一个通知中心, 通过通知中心,注册一个监听事件 ;
2. 在第一个界面中,设置接收到通知的事件;
3. 在第一个界面中的dealloc中, 将通知中心remove掉;
4. 在第二个界面中, 建立一个通知中心, 通过通知中心, 发送通知(发送通知的过程就是传值的过程,将要传输的值作为object的值传给第一个界面

2、简单使用
第一界面:
     //通知中心是个单例
     NSNotificationCenter *notiCenter = [NSNotificationCenter defaultCenter];
     // 注册一个监听事件。第三个参数的事件名, 系统用这个参数来区别不同事件。
     [notiCenter addObserver:self selector:@selector(receiveNotification:) name:@"cesuo" object:nil];
     // @selector(receiveNotification:)方法, 即受到通知之后的事件
 - (void)receiveNotification:(NSNotification *)noti
{
     // NSNotification 有三个属性,name, object, userInfo,其中最关键的object就是从第三个界面传来的数据。name就是通知事件的名字, userInfo一般是事件的信息。
    NSLog(@"%@ === %@ === %@", noti.object, noti.userInfo, noti.name);
 }
// 第一界面中dealloc中移除监听的事件
- (void)dealloc
{
    // 移除当前对象监听的事件
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [super dealloc];    
}
第二界面:
     // 创建一个通知中心
         NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; 
     // 发送通知. 其中的Name填写第一界面的Name, 系统知道是第一界面来相应通知, object就是要传的值。 UserInfo是一个字典, 如果要用的话,提前定义一个字典, 可以通过这个来实现多个参数的传值使用。
     [center postNotificationName:@"cesuo" object:@"zhangheng" userInfo:dic];
2、开发案例:传多个参数
第一界面:

- (void)viewDidLoad {
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(cardName:) name:@"cardName" object:nil];
    self.title=@"提现";
}
#pragma mark-接收通知
- (void)cardName:(NSNotification *)notification{
    cardId=notification.userInfo[@"id"];
    [addCard setTitle:notification.userInfo[@"cardName"] forState:UIControlStateNormal];
}
- (void)dealloc
{
// 移除当前对象监听的事件
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}
第二界面:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString * str=[NSString stringWithFormat:@"   %@",model.time];
    NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:str,@"cardName",model.did,@"id",nil];
    NSLog(@"%@",dic);
    [[NSNotificationCenter defaultCenter] postNotificationName:@"cardName" object:nil userInfo:dic];
    [self.navigationController popViewControllerAnimated:YES];
}

相关文章

网友评论

      本文标题:iOS 通知

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