0

通常我们使用 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设置为第一响应者,为什么系统只是自动隐藏键盘?

谁能解释这个过程的机制?

非常感谢你!

4

2 回答 2

4

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

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

对于文本字段,点击该字段会导致该字段成为第一响应者,从而拦截所有后续 UI 事件。文本字段使用键盘捕获 UI 事件,因此它会自动调用键盘。文本字段对与键盘无关的任何输入都不感兴趣,因此当它辞去第一响应者的职务时,它会将键盘放在一边。

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

(顺便说一句,这已经是老帽子了,但在 90 年代初,当 Objective-C 和 NextStep 是开创性的技术时,它受到了粉丝的欢迎。Tim Burners-Lee 发明了网络浏览器,只是为了找个借口购买下一个立方体。)

于 2010-10-12T17:08:59.547 回答
0

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

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

于 2010-10-12T17:08:22.030 回答