为什么UITextField成为FirstResponder返回NO?

use*_*889 5 objective-c uitextfield becomefirstresponder ios

这是我的代码:

while (true) {
    if ([identificationField becomeFirstResponder]) {

        NSLog(@"finally!");
        break;
    }
    else{
        if ([identificationField canBecomeFirstResponder]) {
            NSLog(@"can");
        }
        else{
            NSLog(@"cannot");
        }
        NSLog(@"%@", identificationField);
        NSLog(@"dadgum!!");

    }
}
Run Code Online (Sandbox Code Playgroud)

这是它记录的内容:

   2014-02-05 11:33:54.253 Store Test[22488:70b] can

   2014-02-05 11:33:54.254 Store Test[22488:70b] <UITextField:
   0xb5c89a0; frame = (10 1; 300 43); text = ''; clipsToBounds = YES;
   opaque = NO; autoresize = TM+BM; gestureRecognizers = <NSArray:
   0xb5cc7b0>; layer = <CALayer: 0xb5c8b40>>

   2014-02-05 11:33:54.254 Store Test[22488:70b] dadgum!!
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么会这样做?如您所见,文本字段可以成为第一个响应者,它不会.

小智 5

你的identificationField是否在UIView层次结构中?如果它没有添加到窗口并显示它不能成为第一响应者.

  • 当文本字段在成为第一响应者时从视图/窗口层次结构中短暂移除(例如重新加载包含该文本字段的“UITableView”或“UICollectionView”)时,也会发生这种情况。 (2认同)

dev*_*os1 5

如果 AUITextFielduserInteractionEnabled属性NO如我刚刚发现的那样,它也将拒绝成为第一响应者。我必须在文本字段上明确重新启用用户交互,然后才能接受第一响应者状态。

另外值得注意的是,您可以通过调用[UIView endEditing:YES]包含当前第一响应者的任何超级视图来强制当前具有第一响应者状态的任何元素放弃它。

  • 此外,如果 isEnabled == false,UITextField 将拒绝显示键盘 (2认同)

App*_*ker 2

您可能有另一个因素阻止了它。需要更多地了解您的项目才能真正回答确切的问题。

但是,您可能有另一个具有委托方法的文本字段

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
    return NO;
}
Run Code Online (Sandbox Code Playgroud)

这意味着它不会辞去第一响应者的职务。