这是我参与「第四届青训营 」笔记创作活动的第17天
作为一个码龄一年的程序猿,初次开发一个结构稍微复杂一点的工程,最头疼的莫过于了解和熟悉对应语言提供的信息传递机制和事件触发机制。
之前使用qt时,用了一阵子算是初步学会了信号和槽的关联机制,但写的项目结构还算简单,数据也都是本地处理,不涉及网络请求、异步同步之类的问题。最近参加字节的青训营ios课程,在开发简化版天气预报app时,先是在网络请求上栽了大跟,不过也因此学习到了异步、回调相关的知识。由一个网络请求引出的异步与回调问题
这段时间开发的经验和网上查的一些资料,使我总结了两个ios开发过程中信息传递和事件触发的两个机制。第一个是使用NSNotification实现UIViewController之间、各种控件之间、UIViewController与控件之间的信息传递。第二个是UIViewController遵从某些控件的某种协议,然后将该控件的代理设为这个UIViewController自身,从而达到自定义的控件事件触发效果。
第一个机制首先在viewDidload中进行observer注册,具体代码主要为:
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector: @selector(自己写的收到消息后调用的函数,注意这个需要调用的函数需要有NSNotification参数,这样通过传来的NSNotification变量得到特定的数据) name:@"消息名称" object:发出信息的对象指针,可以写nil];
然后在viewDidDisappear中注销注册:
[super viewDidDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"消息名称" object:发出信息的对象指针,可以写nil];
至于发送信息的一方则是这样发送信息:
NSNotification *notification = [[NSNotification alloc] initWithName:@"消息名称" object:接受信息的对象指针,可以写nil userInfo:@{@"key":要传的值}];
[[NSNotificationCenter defaultCenter] postNotification:notification];
第二个机制以一个包含了搜索栏(search bar)的view controller为例。先定义一个
@interface ViewControllerWithSearchBar : UIViewController <UISearchBarDelegate> 然后在@implementation ViewControllerWithSearchBar部分实现:
-(void) searchBarTextDidBeginEditing:(UISearchBar *)searchBar(开始编辑)
-(void) searchBarTextDidEndEditing:(UISearchBar *)searchBar(结束编辑)
-(void) searchBarCancelButtonClicked:(UISearchBar *)searchBar(取消编辑)
-(void) searchBarSearchButtonClicked:(UISearchBar *)searchBar(搜索结果)
等方法,这样就可以实现在一个viewcontroller中展现一个searchbar的效果了。