ios 键盘通知

通知 (Notification): 通过 观察者模式 实现

作用: 完成对象之间的消息传递

核心理念

  • 通知的发送方不知道接收方是谁,只需要将通知发给通知中即可
  • 通知的接收方不知道发送方是谁,只需要提前向通知中心订阅某个通知即可
  • 一旦通知的发送方真的发出了通知,则有通知中心负责将这个通知推送给所有订阅了该通知的接收方

自定义通知
接收方和发送方都是我们自己写的

系统提供的通知

  • 键盘通知
    每当键盘弹起时系统会自动发出名字叫
    > UIKeyboardWillShowNotification
    > UIKeyboardDidShowNotification
    每当键盘收起时系统会自动发出名字叫
    >UIKeyboardWillHideNotification
    >UIKeyboardDidHideNotification

键盘通知:

//键盘通知
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [self.view endEditing:YES];
}

-(void)viewWillAppear:(BOOL)animated {
    //向通知中心注册 接收 键盘将要弹起的通知
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(openKeyBoard:) name:UIKeyboardWillShowNotification object:nil];

    //向通知中心注册 接收 键盘将要收起的通知
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(closeKeyBoard:) name:UIKeyboardWillHideNotification object:nil];
}

//已经不再显示
-(void)viewDidDisappear:(BOOL)animated {
    //removeObserver 从通知中心 移除 之前监听的通知
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}

- (void)viewDidLoad {
    [super viewDidLoad];
   
}
-(void)openKeyBoard:(NSNotification*)notification {
    NSLog(@"键盘将要弹起");
}
-(void)closeKeyBoard:(NSNotification*)notification {
    NSLog(@"键盘将要收起");
}

自定义通知

//获取通知并拟定通知内容
@implementation CCTV
-(void)send {
//    1.获取通知中心
    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];

    //2.发通知(  name : 通知的名字,    object : 谁发的通知,  userInfo : 通知的内容)
    [center postNotificationName:@"cctv2" object:self userInfo:@{@"time":@"6:20", @"name":@"明天来新老师"}];
}
@end

//订阅通知
@implementation MyTv
-(instancetype)init {
    if (self = [super init]) {
        //向通知中心 订阅名字叫 cctv2 的通知
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(play:) name:@"cctv2" object:nil];
    }
    return self;
}

//接收通知调用的方法
-(void)play:(NSNotification*)notification {
    NSDictionary *dic = notification.userInfo;
    NSLog(@"中央2台%@点,播放%@综艺节目",dic[@"time"],dic[@"name"]);
}
@end

//初始化
- (void)viewDidLoad {
    [super viewDidLoad];
    self.cctv = [[CCTV alloc]init];
    //mytv 的初始化方法中 已经向通知中心订阅了 名字为 cctv 的通知
    self.mytv = [[MyTv alloc]init];
}
posted @ 2017-08-23 21:01  笑笑就好90  阅读(299)  评论(0编辑  收藏  举报