【问题标题】:What exactly a responder means?响应者到底是什么意思?
【发布时间】:2010-10-12 16:48:47
【问题描述】:

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

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

非常感谢!

【问题讨论】:

    标签: iphone cocoa-touch first-responder


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 酷。你的意思是当搜索栏成为第一响应者时,搜索栏会自动调用显示键盘功能,而当搜索栏停用时,它会自动调用隐藏键盘功能。这是正确的吗?所以,假设我有另一个对象是一个按钮,如果我将该按钮设置为第一响应者,键盘也会被隐藏,对吧?
    猜你喜欢
    • 2012-04-04
    • 2017-08-07
    • 2017-07-20
    • 2014-09-23
    • 2014-07-25
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多