响应者究竟是什么意思?

时间:2010-10-12 16:48:48

标签: iphone cocoa-touch first-responder

通常我们使用resignFirstResponder隐藏iphone应用程序中的键盘。 例如,当我们使用UISearchBar时,在用户单击搜索按钮后,我们通过实现searchBarSearchButtonClicked函数隐藏键盘,如下所示:

 -(void)searchBarSearchButtonClicked:(UISearchBar*)searchBar{   
        NSLog(@"Search Button Click, result should be show here"); 
        [searchBar setShowsCancelButton:NO animated:YES];
       [searchBar resignFirstResponder];    
        self.dictTableView.allowsSelection = YES;   
        self.dictTableView.scrollEnabled = YES;     
}

我们将searchBar设置为第一个响应者,然后在用户单击搜索按钮后隐藏键盘。

为什么它会像这样?我们没有调用隐藏键盘的任何功能,我们只是将searchBar设置为第一响应者,系统为什么只是自动隐藏键盘?

有人能解释一下这个过程的机制吗?

非常感谢!

2 个答案:

答案 0 :(得分:4)

Objective-C通过以选择器的形式向对象发送消息来工作,这些选择器是属于目标对象的方法的名称。 “响应者”是将响应UI事件发送的消息的对象。

响应者生活在一个称为响应者链的层次结构中。如果响应者无法理解UI消息,它会将其转发给链中的下一个响应者,直到应用程序对象本身。

对于文本字段,点击该字段会使该字段成为第一个响应者,以便它拦截所有后续UI事件。文本字段使用键盘捕获UI事件,因此它会自动唤起键盘。文本字段对与键盘无关的任何输入都不感兴趣,因此当它作为第一响应者辞职时,它会使键盘脱离。

这是面向高度面向对象API的美妙之处。您不必对标准行为进行微观管理。对象本身为您处理它。如果你习惯使用更多程序的API,那可能会有点迷失方向。

(顺便说一下,这些都是旧帽子,但是在90年代早期,当Objective-C和NextStep是突破性的技术时,它已经成了风扇 - 蒂姆·伯纳斯 - 李发明了网络浏览器,所以他会有借口购买下一个立方体。)

答案 1 :(得分:0)

“第一响应者”是当前正在接受事件(键盘或触摸事件)的UI对象。期望键盘输入的对象(如搜索栏)将导致键盘在成为第一响应者时出现。

当您告诉搜索栏停止成为“第一响应者”([searchBar resignFirstResponder])时,不再需要键盘并离开。