响应者究竟意味着什么?
通常我们使用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设置为第一响应者,为什么系统会自动隐藏键盘?
任何人都可以解释这个过程的机制吗?
非常感谢你!
Objective-C通过以属于目标对象的方法名称的选择器形式向对象发送消息。 “响应者”是将响应由UI事件发送的消息的对象。
响应者生活在一个称为响应者链的层次结构中。 如果响应者无法理解UI消息,它会将其转发给链中的下一个响应者,直到应用程序对象本身。
在文本字段的情况下,点击该字段将导致该字段成为第一响应者,以便截取所有后续的UI事件。 文本字段用键盘捕捉UI事件,以便自动唤起键盘。 文本字段对任何与键盘无关的输入都没有兴趣,所以当它作为第一响应者辞职时,它将把键盘移开。
这是一个高度面向对象的API的美妙之处。 您不必微观管理标准行为。 对象本身会为你处理它。 如果你习惯于使用更程序化的API,可能会有点迷惑。
(顺便说一下,现在这是旧帽子,但90年代早期Objective-C和NextStep是开创性技术的时候,这种风格简直令人fan目结舌.Tim Burners-Lee发明了Web浏览器,以便他可以借口购买下一个立方体。)
“第一响应者”是当前正在接受事件(键盘或触摸事件)的UI对象。 希望键盘输入的对象(如搜索栏)会导致键盘在成为第一响应者时出现。
当你告诉[searchBar resignFirstResponder]
停止成为“第一响应者”( [searchBar resignFirstResponder]
)时,键盘不再需要并且消失。