通常我们使用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设置为第一响应者,系统为什么只是自动隐藏键盘?
有人能解释一下这个过程的机制吗?
非常感谢!
答案 0 :(得分:4)
Objective-C通过以选择器的形式向对象发送消息来工作,这些选择器是属于目标对象的方法的名称。 “响应者”是将响应UI事件发送的消息的对象。
响应者生活在一个称为响应者链的层次结构中。如果响应者无法理解UI消息,它会将其转发给链中的下一个响应者,直到应用程序对象本身。
对于文本字段,点击该字段会使该字段成为第一个响应者,以便它拦截所有后续UI事件。文本字段使用键盘捕获UI事件,因此它会自动唤起键盘。文本字段对与键盘无关的任何输入都不感兴趣,因此当它作为第一响应者辞职时,它会使键盘脱离。
这是面向高度面向对象API的美妙之处。您不必对标准行为进行微观管理。对象本身为您处理它。如果你习惯使用更多程序的API,那可能会有点迷失方向。
(顺便说一下,这些都是旧帽子,但是在90年代早期,当Objective-C和NextStep是突破性的技术时,它已经成了风扇 - 蒂姆·伯纳斯 - 李发明了网络浏览器,所以他会有借口购买下一个立方体。)
答案 1 :(得分:0)
“第一响应者”是当前正在接受事件(键盘或触摸事件)的UI对象。期望键盘输入的对象(如搜索栏)将导致键盘在成为第一响应者时出现。
当您告诉搜索栏停止成为“第一响应者”([searchBar resignFirstResponder]
)时,不再需要键盘并离开。