我目前正在为iOS 7编写应用程序,但最近我遇到了一个有趣的错误。在我的一个UIViews中,我有3个普通的UITextField和另外两个UITextFields,它们在编辑开始时就是resignFirstResponder。它们显示UIDatePicker和UIPickerView以及UIToolbar。我遇到的错误是当我输入前3个文本字段之一时,继续单击结束编辑的文本字段而不单击UIControl(称为backgroundTapped :),键盘不会消失。我添加了一个日志来查看文本字段是否使用“canResignFirstResponder”重新调整firstResponder状态,并且它返回“1”,但键盘不会消失,即使在更改视图之前我直到单击前3个文本之一字段并单击背景。
这是我的textFieldDidBeginEditing:以及我的showRunTypePicker的开头:方法:
textFieldDidBeginEditing:
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
[textField becomeFirstResponder];
if (textField.tag == 3005) {
//[textField resignFirstResponder];
//[self.view endEditing:YES];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.25];
[self showRunTypePicker:self];
[UIView commitAnimations];
}
}
showRunTypePicker:
- (IBAction)showRunTypePicker:(id)sender
{
BOOL canResign = [runTypeField canResignFirstResponder];
NSLog(@"canResign: %hhd", canResign);
[runTypeField endEditing:YES];
[runTypeField resignFirstResponder];
[[self view] endEditing:YES];
[pickerView endEditing:YES];
[pickerView setHidden:YES];
[toolbar setHidden:YES];
[distanceField endEditing:YES];
...
}
我似乎无法弄清问题是什么。任何人都可以帮我吗?
编辑:它现在正在运作。我将[self showRunTypePicker:self]设置为[self showRunTypePicker:textField]并将其移动到textFieldShouldBeginEditing。键盘正好消失了。答案 0 :(得分:0)
您的代码存在错误。
阅读此行
[self showRunTypePicker:self];
你不认为它应该是:
[self showRunTypePicker:textField];
此处您的目的是在选中特定文本字段时重新设置键盘。 所以你应该实际传递
textField
标签为3005的实例。
尝试将发件人用作UITextField并执行bool检查。
希望有所帮助。