通知中心的使用有3个步骤:
添加观察者;
监听事件;
移除观察者.
写属性
#import "ViewController.h"
@interface ViewController ()
- (IBAction)postNotification:(id)sender; //按钮关联方法
@property (strong, nonatomic) IBOutlet UITextField *textField;
@end
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//监听输入框内容改变, 添加观察者
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChange:) name:UITextFieldTextDidChangeNotification object:self.textField];
}
输入框文字改变的监听方法
- (void)textChange:(NSNotification *)noti {
//当输入框的内容变化时, 打印
NSLog(@"- _ - !!");
}
- (void)dealloc
{
//移除观察者
[[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:self.textField];
}
另外是发送通知, 接收通知
- (IBAction)postNotification:(id)sender {
//点击按钮, 触发事件, 发送通知
//NSNotificationCenter, 通知中心, 单例
//name: 通知名字, 标识符作用, 只用名字匹配才能够接收到这条通知
//object: 一般为空, 只有个别情况才会赋值
//userInfo: 用来传参数
[[NSNotificationCenter defaultCenter] postNotificationName:@"kTrafficOfHenan" object:nil
userInfo:@{@"news": @"balabala"}];
}
然后在别的页面接收通知
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)
launchOptions {
// Override point for customization after application launch.
//接收通知, 重要的是通知名字(name)保持一致,才能正确地接收到通知
//接收通知
//注册观察者
//observer: 观察者
//selector: 方法
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveTraffic:)
name:@"kTrafficOfHenan" object:nil];
return YES;
}
接收到通知后, 触发方法
- (void)receiveTraffic:(NSNotification *)noti {
NSLog(@"%@", noti.userInfo); //此处打印的 noti.userInfo 是发通知的 userInfo(字典)
}
移除观察者
- (void)dealloc
{
//当观察者不需要的时候
//移除观察者
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"kTrafficOfHenan" object:nil];
}