NSNotificationCenter 通知中心传值

Posted PengYunjing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSNotificationCenter 通知中心传值相关的知识,希望对你有一定的参考价值。

1NSNotification

这个类可以理解为一个消息对象,其中有三个成员变量。

这个成员变量是这个消息对象的唯一标识,用于辨别消息对象。

@property (readonly, copy) NSString *name;

 

这个成员变量定义一个对象,可以理解为针对某一个对象的消息。

@property (readonly, retain) id object;

 

这个成员变量是一个字典,可以用其来进行传值。

@property (readonly, copy) NSDictionary *userInfo;

 几点注意:

1、如果发送的通知指定了object对象,那么观察者接收的通知设置的object对象与其一样,才会接收到通知,但是接收通知如果将这个参数设置为了nil,则会接收一切通知。

2、观察者的SEL函数指针可以有一个参数,参数就是发送的死奥西对象本身,可以通过这个参数取到消息对象的userInfo,实现传值。

 

首先我们要确认那边要传值那边要接受传过来的值,

在传值的一方我们要写一个创建一个消息 NSNotification ,并且用通知中心NSNotificationCenter 发送这个消息

接收传过来的值这里我们要创建一个通知中心NSNotificationCenter 并且添加观察者,在添加观察者这个方法里面有一个响应事件的方法  我们可以在响应事件的方法里面接收传过来的值

 

好啦我们开始写代码吧

传值的一方在这个控制器里面我们创建一个UITextFiled UITextfiledtext传到上一个控制器的UIlabel上显示出来

#import "PYJViewController.h"

@interface PYJViewController ()
@property (nonatomic,strong) UITextField *textField;
@end

@implementation PYJViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    UIButton * button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame =CGRectMake(100, 100, 100, 30);
    [button setTitle:@"返回" forState:UIControlStateNormal];
    button.backgroundColor=[UIColor yellowColor];
    [button addTarget:self action:@selector(backLastPage:) forControlEvents:UIControlEventTouchUpInside];
    self.textField=[[UITextField alloc]init];
    self.textField.frame=CGRectMake(100, 150, 200, 30);
    self.textField.borderStyle=UITextBorderStyleRoundedRect;

    [self.view addSubview:self.textField];
    
    [self.view addSubview:button];
    self.view.backgroundColor=[UIColor whiteColor];

}

- (void)backLastPage:(UIButton *)bt{
    
    //创建一个消息对象
    NSNotification * notice =[NSNotification notificationWithName:@"notice" object:nil userInfo:@{@"text":self.textField.text}];
    //发送消息
    [[NSNotificationCenter defaultCenter]postNotification:notice];
    
    [self.navigationController popViewControllerAnimated:YES];
    
}

 

接收传值的控制器:

#import "ViewController.h"
#import "PYJViewController.h"
@interface ViewController ()

@property (weak, nonatomic) IBOutlet UILabel *label;
- (IBAction)buttonAction:(UIButton *)sender;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
   
    self.label.text=@"测试一";
    
    //获取通知中心
    NSNotificationCenter * center =[NSNotificationCenter defaultCenter];
    
    //添加观察者 Observer表示观察者  reciveNotice:表示接收到的消息  name表示再通知中心注册的通知名  object表示可以相应的对象 为nil的话表示所有对象都可以相应
    [center addObserver:self selector:@selector(reciveNotice:) name:@"notice" object:nil];
    
}

- (void)reciveNotice:(NSNotification *)notification{
    
    NSLog(@"收到消息啦!!!");
    
    self.label.text=[notification.userInfo objectForKey:@"text"];
    
}

- (IBAction)buttonAction:(UIButton *)sender {
    
    PYJViewController * vc=[[WBBViewController alloc]init];
    
    [self.navigationController pushViewController:vc animated:YES];
    
}

 

 

 

 

以上是关于NSNotificationCenter 通知中心传值的主要内容,如果未能解决你的问题,请参考以下文章

NSNotificationCenter 通知中心传值

iOS之NSNotificationCenter通知中心使用事项

关闭时未收到 NSNotificationCenter 通知

通知机制

IOS学习之NSNotificationCenter消息机制

如何在 QT 应用程序中处理来自 NSNotificationCenter 的通知?