OC传值之-通知,NSNotificationCenter

1.背景:
ios开发的传值方式大致分为五种,我们在写应用的时候免不了用到通知,每一种通知又有各自的特点,我们要根据自己的需要合理选择运用。本文着重介绍通知。

2.简介:
本文介绍通知的基本用法,包括创建和发起通知等。

3.原理:
通知的原理其实很简单,添加通知事件的时候设置一个标识符和一个通知执行的事件,然后在另一个地方发起通知,利用前面的标识符作为匹配。一般发起通知有条件判断,判断成功就发出通知,开始添加的通知事件便被执行。举个例子,在网络请求的地方,如果网络请求成功就发起通知,在Model等地方处理网络请求的数据。

4.步骤:
1).在一个控制器里添加通知(监听)

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(remove) name:@"ArrayOutOfBounds" object:nil];//添加通知事件
/*
self为观察者,即控制器本身
remove为接收到通知后调用的方法,即触发时间
ArrayOutOfBounds为通知的标识符,也就是名字
object里面填接收哪个发送者的通知,nil表示接受所有发送者的通知
*/

2).在需要发出通知的地方添加代码

[[NSNotificationCenter defaultCenter] postNotificationName:@"ArrayOutOfBounds" object:nil];
/*
ArrayOutOfBounds为通知的名字,必须与前面注册的通知名字相同
object里面填附带的信息,*不同于注册*,比如网络请求成功了,我们可以在这里吧网络请求下来的object传送过去,remove(假如是附带参数的方法)方法里面就可以直接接收并且使用。
*/

3).移除通知(移除通知是一个良好的编码习惯,能够避免一些不必要的麻烦,各位可以自行尝试不移除是否会crash)

- (void)dealloc{
    //所有本界面执行的通知事件,要在注释前注销(否则会出现崩溃等很多弊端)
    [[NSNotificationCenter defaultCenter] removeObserver:self];//移除本控制器所有通知事件(一次性移除,下面是单个移除)
   /*[NSNotificationCenter defaultCenter] removeObserver:<#(nonnull id)#> name:<#(nullable NSString *)#> object:<#(nullable id)#>];*/
}

}

4).键盘通知。到了这里通知的介绍就结束了,不过有些系统定义的通知我们也要了解,比如键盘通知

//键盘通知(下面四种,一眼就能看出什么时候触发通知)
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(up:) name:UIKeyboardWillShowNotification object:nil];//弹出键盘,则触发up方法
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(down:) name:UIKeyboardWillHideNotification object:nil];
//     UIKeyboardWillShowNotification;
//     UIKeyboardDidShowNotification;
//     UIKeyboardWillHideNotification;
//     UIKeyboardDidHideNotification;

显然键盘信息被传送给up/down方法了,接着就可以在两个方法中获取一些信息,然后做键盘弹出和收回的一些界面高度适应设置

- (void)up:(NSNotification *)info{//info就是键盘
    NSDictionary *userInfo = info.userInfo;
    CGRect keyBoardFrame = [userInfo [UIKeyboardFrameBeginUserInfoKey] CGRectValue];//获取字典中键盘的值
    CGFloat height = keyBoardFrame.size.height;//当前键盘的高
    CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;//屏幕的高
}

- (void)down:(NSNotification *)info{
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值