如何设置 UIView 成为第一响应者?

How to set the UIView become first Responder?

我正在学习UIResponder。我写了一些测试代码。在我的代码中,我想让 UIView 成为第一响应者,但我失败了。我的测试步骤是:

  1. 在故事板中创建 UIView
  2. 为此视图创建了一个 class 扩展 UIView,并将方法 canBecomeFirstResponder:becomeFirstResponder 重写为 return YES.

  3. 在视图控制器的viewDidAppear:方法的方法中,测试一下:

    - (void) viewDidAppear:(BOOL)animated {
        [self.viewD becomeFirstResponder];
        NSLog(@"%d ", [self.viewD isFirstResponder]);
    }
    

isFirstResponder 的结果总是 NO

我不知道为什么。有谁能够帮助我?谢谢。

becomeFirstResponder Notifies the receiver that it is about to become first responder in its window. YES if the receiver accepts first-responder status or NO if it refuses this status. The default implementation returns YES, accepting first responder status.

A responder object only becomes the first responder if the current responder can resign first-responder status (canResignFirstResponder) and the new responder can become first responder.

在你的情况下,你的视图拒绝状态,这就是为什么它每次都不是。

所以在你的重写中确保你调用 super

还有 您可以尝试确保视图在前面并且可见 您可以尝试结束对当前父视图的编辑 在调用 becomeFirstResponder 之前

[self.view bringSubviewToFront:self.D];
  [self.view endEditing:true];
  [self.D becomeFirstResponder];

还有你不在 ViewDidAppear 中调用 super 的原因吗?