关于iOS通知的简单认识

通知可以用来发送任意消息,甚至可以包含一个 userInfo 字典。你也可以继承 NSNotification 写一个自己的通知类来自定义行为。通知的独特之处在于,发送者和接收者不需要相互知道对方,所以通知可以被用来在不同的相隔很远的模块之间传递消息。这就意味着这种消息传递是单向的,我们不能回复一个通知

有关NSNotification通知类要知道有三个属性

@property (readonly, copy) NSString *name;//通知名称
@property (readonly, retain) id object;//通知的发送者
@property (readonly, copy) NSDictionary *userInfo;//通知内容

创建方式command +鼠标左键 点入头文件查看 很简单~

下面来看一下经常用的NSNotificationCenter类 通知中心

//返回当前进程的默认通知中心可用于检测系统通知 例如键盘或设备旋转
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
//向通知中心注册监听器:
        //observer:通知监听者;
        //aSelector:收到通知要执行的方法;
        //aName:通知名称;
        //anObject:通知发布者
        - (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;

举例说明~
1.监听系统键盘通知使view随键盘显示而上移

//   监听者是控制器    监听键盘的frame改变
[center addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];

-(void)keyboardWillChangeFrame:(NSNotification*)noti;
//    NSLog(@"%@",noti);  可以打印出 被监听者发生的行为
//                                     (发出的消息)
    CGFloat duration=[noti.userInfo[UIKeyboardAnimationDurationUserInfoKey]doubleValue];
    CGRect transfrom=[noti.userInfo[UIKeyboardFrameEndUserInfoKey]CGRectValue];

    CGFloat transfromY=transfrom.origin.y-self.view.frame.size.height;
    [UIView animateWithDuration:duration animations:^{
 self.view.transform=CGAffineTransformMakeTranslation(0, transfromY);
    }];
//*********************只要创建了  就必须销毁 否则系统不稳定容易崩溃即使不崩溃 也不利于性能和内存
-(void)dealloc{
    [[NSNotificationCenter defaultCenter]removeObserver:self];
}

以下关于键盘干货 可在UIKit->UIWindow 中查找

键盘通知的名称:
        UIKeyboardWillShowNotification // 键盘即将显示
        UIKeyboardDidShowNotification // 键盘显示完毕
        UIKeyboardWillHideNotification // 键盘即将隐藏
        UIKeyboardDidHideNotification // 键盘隐藏完毕
        UIKeyboardWillChangeFrameNotification // 键盘的位置尺寸即将发生改变
        UIKeyboardDidChangeFrameNotification // 键盘的位置尺寸改变完毕

系统发出键盘通知时,会附带一下跟键盘有关的额外信息(字典),字典常见的key如下:
        UIKeyboardFrameBeginUserInfoKey // 键盘刚开始的frame
        UIKeyboardFrameEndUserInfoKey // 键盘最终的frame(动画执行完毕后)
        UIKeyboardAnimationDurationUserInfoKey // 键盘动画的时间
        UIKeyboardAnimationCurveUserInfoKey // 键盘动画的执行节奏(快慢)

2.自定义通知的使用

//自定义通知名称(可在.m文件中定义)
NSString *const ClickBtnNotification = @"ClickBtnNotification";
//(.h文件中引用)
UIKIT_EXTERN NSString * const ClickBtnNotification;

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(clickBtn:) name:ClickBtnNotification object:nil];

-(void)clickBtn:(NSNotification *)noti
{   //当监听到按钮点击的通知时会进行调用
    NSLog(@"点我了--- %@",noti);//打印通知内容
}
//在需要发送通知的控制器中点击按钮时发送通知 
//object可用来指定通知发布者(这样可以在添加通知的时候指定谁发布的通知 来进行一一对应)
    [[NSNotificationCenter defaultCenter] postNotificationName:ClickBtnNotification object:nil userInfo:@{@"1":@"1"}];
    最后记得销毁所注册的监听器
    注:注册通知进行传值时注意控制器上下级关系
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值