[英]Why UITextField becomeFirstResponder returns NO?
这是我的代码:
while (true) {
if ([identificationField becomeFirstResponder]) {
NSLog(@"finally!");
break;
}
else{
if ([identificationField canBecomeFirstResponder]) {
NSLog(@"can");
}
else{
NSLog(@"cannot");
}
NSLog(@"%@", identificationField);
NSLog(@"dadgum!!");
}
}
这是它记录的内容:
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!!
有谁知道为什么会这样做? 如您所见,文本字段可以成为第一个响应者,它不会。
你的identificationField是否在UIView层次结构中? 如果它没有添加到窗口并显示它不能成为第一响应者。
如果我刚刚发现其userInteractionEnabled
属性为NO
, UITextField
也将拒绝成为第一响应者。 在接受第一响应者状态之前,我必须在文本字段上明确重新启用用户交互。
另外值得注意的是,您可以强制当前具有第一响应者状态的任何元素通过在包含当前第一响应者的任何[UIView endEditing:YES]
视图上调用[UIView endEditing:YES]
来放弃它。
你可能有另一个阻止它的元素。 需要了解更多关于您的项目以确切回答确切问题。
但是,这里有一个可能你有另一个具有委托方法的textField
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
return NO;
}
这意味着它不会让第一响应者辞职。
无论什么已经是第一响应者可以拒绝放弃第一响应者状态。 在这种情况下,您的UITextField
将不会成为第一个响应者。 因此,您应确保已经是第一响应者的任何内容都不会拒绝放弃该状态。
编辑:
在提交到应用商店时,您不希望将其留在应用中,但是这里有一些使用私有API来确定当前第一响应者的代码:
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView *firstResponder = [keyWindow performSelector:@selector(firstResponder)];
您可以使用它来查看第一响应者是什么,这可以帮助您找出无法让它辞职的原因,如果这确实是问题。
对canBecomeFirstResponder
的调用仅检查接收者本身是否能成为第一个响应者。
如果接收者不能成为第一响应者或当前第一响应者不能辞职,则对becomeFirstResponder
的调用将失败并返回NO
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.