键盘事件和NSTimer

7 篇文章 0 订阅
3 篇文章 0 订阅

一、键盘事件

当用户敲击键盘时会发送什么相应事件?首先,windows管理器捕获该事件并转发给活动的应用。该活动应用将该键盘事件转发给键窗口。键窗口转发事件给“活动的”视图。那么那一个视图是活动的呢?每个窗口都有一个称之为firstResponder的outlet,指向windows的一个视图。该视图是该window的一个“活动”视图。例如,当你点击一个文本域,它将称为那个窗口的firstResponder。当用户试图将firtResponder到另一个视图时(通过选项卡或点击另外一个视图),视图在firtResponder出口改变之前,将进行一些检查。首先,将询问可能将变为firtResponder的视图是否接受first-responder状态。若返回NO则意味着该视图对键盘事件不感兴趣。例如,你没法在slider输入字符,所以它会拒绝first-responder状态。如果视图不接受first-responder状态,那么将询问当前first responder视图是否放弃其first responder角色。如果编辑不通过,该视图可以拒绝放弃first-responder状态。例如,如果用户没有敲全电话号码,文本域将拒绝放弃该状态。最后,视图将被告知它变成了first responder。通常,这会改变其外观。

注意,每个窗体都有自己的first responder。一些窗体可能会被打开,但只有键窗体的first responder能够捕获键盘事件。

NSResponder

我们对以下继承自NSResponder的方法感兴趣:

-(BOOL)acceptsFirstRespnder

通过子类重载,若能处理键盘事件则返回YES。

-(BOOL)resignFirstResponder

询问接收者是否愿意放弃first-responder状态。

-(BOOL)becomeFirstResponder

通知接收者在其NSWindow中它已经变为了first responder。

-(void)keyDown:(NSEvent *)theEvent

通知接收者,用户已经按下了一个键。

-(void)keyUp:(NSEvent *)theEvent

通知接收者,用户已经释放了一个键。

-(void)flagsChanged:(NSEvent *)theEvent

通知接收者,用户已经按下或释放了一个修改器键(Shift、Control等等)。

NSEvent

下面是一些关于键盘事件的NSEVent方法

-(NSString *)characters

返回由事件创建的字符。

-(BOOL)isARepeat

如果用户因按下键引发的键事件被重复,就返回YES;如果键事件是新的,就返回NO。

-(unsigned short)keyCode

向引发事件的键盘返回代码。

-(NSUInteger)modifierFlags

返回一个整数bit域,指明影响接收者的修饰符键。


时钟对象有一个target、一个选择器和一个时延,单位为秒。在时延时间到了之后,选择起消息被发送给target。时钟将自己作为一个参数发送给消息。可以设置时钟来周期性地发送消息。

创建一个TutorController类,当用户点击Go按钮时,将创建一个NSTimer实例。时钟将每0.1秒发送一条消息。该触发的方法将检查两个视图是否匹配。如果匹配,将让用户键入新的字母。否则,进程指示器将更新以反映时间的流逝。当按下Stop按钮,时钟将停止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值