【问题标题】:How to identify which textfield is currently first responder如何识别当前哪个文本字段是第一响应者
【发布时间】:2012-08-05 03:21:33
【问题描述】:

如果您在屏幕上有多个文本字段,并且当您点击它们时会弹出每个文本字段,如果您想以编程方式隐藏键盘,或者让第一响应者辞职,但您不知道要使用哪个文本字段,该怎么办?将resignFirstResponder 消息发送到?有没有办法确定哪个对象/文本字段应该收到这条消息?

【问题讨论】:

标签: iphone objective-c ios ipad uikit


【解决方案1】:

没有获取当前第一响应者的公共方法,但你可以做一些事情来获取它;第一个显然是要自己跟踪这一点。您可以通过多种方式执行此操作,如果您不想触及任何现有的类而只是希望它工作,那么类别和方法调配就可以解决问题。然而,更简洁的解决方案是遍历视图层次结构并询问视图是否是当前的第一响应者。您可以从根 UIWindow 开始并开始迭代,或者您可以从当前 UIViewController 的视图开始,但请记住,当前的第一响应者不必是您的根 UIWindow 视图的一部分层次结构(例如,如果您在 UIAlertView 中有一个文本字段)。

【讨论】:

    【解决方案2】:

    检查所有文本字段调用

    [textfield isFirstResponder]
    

    【讨论】:

      【解决方案3】:

      您可以通过将视图控制器设置为所有文本字段的委托对象来跟踪哪个文本字段是第一响应者,然后当您的子类文本字段获得“becomeFirstResponder”方法调用时,告诉您的视图控制器哪个文本字段是当前字段。

      或者,还有一种更直截了当的方法,即“UIView”的类别扩展:

      @implementation UIView (FindAndResignFirstResponder)
      - (BOOL)findAndResignFirstResponder
      {
          if (self.isFirstResponder) {
              [self resignFirstResponder];
              return YES;     
          }
          for (UIView *subView in self.subviews) {
              if ([subView findAndResignFirstResponder])
                  return YES;
          }
          return NO;
      }
      @end
      

      我得到了from this potentially very related question

      【讨论】:

        【解决方案4】:

        您可以检查所有文本字段,然后轻松识别。

        [textfield isFirstResponder];
        

        【讨论】:

          【解决方案5】:

          试试这个(Swift 3):

          if textField.isEditing {
             textField.resingFirstResponder()
          }
          

          【讨论】:

            猜你喜欢
            • 2016-07-07
            • 2020-08-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-21
            • 1970-01-01
            相关资源
            最近更新 更多