IOS开发之──事件响应

   事件出现在iphone上有三种主要方式:通过动作、通过委托事件、通过通知。

   iphone事件响应来自于UIResponder对象,而iphone通知来自于NSNotificationCenter。不必担心如何访问响应者的方法和属性,因为UIResponder对象是多数UIKit对象的父级,但是NSNotificationCenter却需要特殊访问。

   一、事件和动作

   多数用户在iphone上输入会产生置于响应者链中的一个事件。响应者链是一组对象链接集,多数部分是通过视图层次结构向上延伸的。任何输入都是由第一响应者先捕捉到的,它一般是与用户直接交互的对象。如果此对象不能解析输入,那么它会将输入向上发送到其超视图(例如:标签可能会将输入发送到其全屏幕视图),然后再到其超视图,不断向上抛(例如:向上至视图,然后向上至视图控制器)。如果输入沿着视图层次结构一直向上至窗口对象,那么之后,它会被发送到应用程序本身,并最终传递到应用程序委托。

 

   这些对象中的任何一个都可以选择处理一个事件,这将会停止响应者链的传递。按照标准的MVC模式,通常要将事件响应构建到UIViewControllers对象中,此对象在响应者链中相当远。

 

   对于任一种UIControl对象,如按钮、滑块、切换开关,事件通过会转变为动作。事件当触摸报告到屏幕,而动作则报告控件的操作,因此也更易读。动作所遵循的响应层次结构略有不同。

 

   二、委托和数据源

   通过委托:可以将事件发送到非第一响应者的对象。也就是一个对象(通常是视图控制器)处理另一个对象(通常是视图)的事件。它是数据源的近亲,数据源也是一个对象处理另一个对象的数据设置和控制。

 

   委托和数据源分别由一个协议控制,协议是委托和数据源同意响应的一组方法。例如:表格的委托可能必须要响应的一个方法,该方法在表格的行被选定时会警告它。类似地,表格数据源可能用于描述表格所有行的外观。

 

   委托和数据源可以完美地适应Objective─C使用的MVC模式,因为它们允许视图将其工作转交给其控制器而不必担心这些对象在响应者链中的位置。

 

   三、通知

   标准事件响应和委托代表了就标准事件(例如手指触摸屏幕)向对象发出警告的两种方式。还可以使用第三种方式──通知──规划许多不同类型的活动,比如iphone方向的改变或网络连接关闭。

 

   对象注册使用NSNotificationCenter接收一定类型的通知,然后相应地处理这些通知。

 

   所有通知通过 NSNotificationCenter发生,要使用它,必须创建该共享对象的一份副本:

   [NSNotificationCenter defaultCenter]

   之后,可以使用- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject方法来请求某个通知。observer是一个对象(通常是self),将接收通知方法,selector:是将在观察程序中调用的方法,name:是通知的名称(将出现在类参考中),object:是你想要限制从哪些对象接收通知时使用的参数(但是它通常设置为nil);

   例如:要接收我们的应用UIApplicationWillTerminateNotification终止通知时,可以使用如下代码:

   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willTerminate:) name:UIApplicationWillTerminateNotification object:nil];

   总之,通知一般有如下四个步骤:首先,通过读取适当的参考,了解到一有一个通知。其次,可能需要显示地打开通知(对于UIApplicationWillTerminateNotification就是这样),第三,编写一个方法响应通知(在上述例子是用:-(void)willTerminate:(NSNotification *)notification),第四,利用NSNotificationCenter将通知与方法相连。

 

    通知系统中还有更强大的功能,你不仅可以设置多个观察者,也可以张贴自己的通知。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值