已经是第二天,无法弄清楚问题,
我UITabelView
使用自定义UICellViews
,每个自定义UICellView
由UILabel
和UITextField
组成。
自定义UICellView
对象在其UITextField
方法中分配UILabel
和init
,并在dealloc
中发布。
UICellViews
中自定义UITableView
的数量为6.
用户场景如下
UITextFields
虚拟键盘时,用户输入一些文字UITextField
时,如果虚拟键盘处于活动状态,则应该隐藏它,如果它被隐藏,则不会显示。在我的UITextFieldDelegate
课程中实施UIViewController
协议,并将每个UITextField
的代理设置为自己。
我的委托方法如下
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if (textField.tag != 6) {
return YES;
} else {
[textField resignFirstResponder];
return NO;
}
}
-(BOOL) textFieldShouldEndEditing:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
-(void) textFieldDidBeginEditing:(UITextField *)textField {
/* Some code */
}
-(void) textFieldDidEndEditing:(UITextField *)textField
{
[textField resignFirstResponder];
}
所有功能都正常!
现在,虚拟键盘永远不会被隐藏,为什么会这样?
PS。类似的代码在iPhone上有效,但这个问题存在于iPad上。
答案 0 :(得分:5)
您需要知道上次使用的是哪个文本字段!所以你可以做[lastUsedTextField resignFirstResponder]
有一个肮脏但有效的技巧..你可以让你的textfield成为新的活动UITextField并立即在下一个周期中调用resignFirstResponder:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if (textField.tag != 6) {
return YES;
} else {
// this will schedule keyboard dismissal for the current text field
dispatch_async(dispatch_get_main_queue(), ^{
[textField resignFirstResponder];
});
return YES; // -> make this one active
}
}
答案 1 :(得分:0)
你是否为textField设置了动作?
[YourTextField addTarget:self action:@selector(textFieldDoneEditing:) forControlEvents:UIControlEventEditingDidEndOnExit];
PS为任何ControlEvent设置任何选择器