OC传值之-通知,NSNotificationCenter
来源:互联网 发布:免费网络空间 编辑:程序博客网 时间:2024/05/16 09:40
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{}
0 0
- OC传值之-通知,NSNotificationCenter
- OC学习篇之---通知(NSNotificationCenter)
- 通知传值(NSNotificationCenter)
- 通知传值(NSNotificationCenter)
- NSNotificationCenter 通知传值
- IOS 之 通知NSNotificationCenter
- NSNotificationCenter 通知中心实现传值
- NSNotificationCenter通知传参数
- 37.消息机制之通知中心传值(NSNotificationCenter)
- NSNotificationCenter 通知
- 通知NSNotificationCenter
- 通知--NSNotificationCenter
- 通知NSNotificationCenter
- NSNotificationCenter通知
- OC——通知(NSNotificationCenter)基本声明方法
- iOS开发之通知中心(NSNotificationCenter)
- iOS开发之通知中心(NSNotificationCenter)
- iOS开发之通知中心(NSNotificationCenter)«
- Android 自定义dialog位置和大小
- java递归,非递归遍历二叉树
- spirng mvc配置文件
- Apache配置
- C#开发学习笔记:利用XML配置文件连接数据库
- OC传值之-通知,NSNotificationCenter
- CUDA变量修饰符
- 为什么 web components 如此重要
- delphi QR code
- 100、WebView
- JAVA根据文件名、URL下载远程文件
- STM8 模拟串口程序
- [LeetCode]404. Sum of Left Leaves
- 解决虚拟机可以连网但无法ping通的问题