我的viewcontroller上有一个带有textfield的表单。当用户触摸文本字段以添加其状态时,我显示UIPicker以供他们选择一个。问题是如果键盘是从以前的文本字段显示的,我无法解除它。这是我的代码:
- (void) textFieldDidBeginEditing:(UITextField *)textField {
if (self.currentTextField) {
self.currentTextField = nil;
self.currentTextField = (KIP_TextField*)textField;
} else {
self.currentTextField = (KIP_TextField*)textField;
}
if (self.currentTextField.tag == 0 || self.currentTextField.tag == self.arrSearchFields.count-1) {
//kill the editing
[self.view endEditing:YES];
[self.currentTextField resignFirstResponder];
//set the picker type
if (self.currentTextField.tag == 0) {
self.currentPickerType = SUPPLIER_PICKER;
} else if (self.currentTextField.tag == self.arrSearchFields.count-1) {
self.currentPickerType = STATE_PICKER;
}
if (!self.hasPicker) {
[self addPicker];
} else {
[self closePicker:YES];
}
} else {
[self closePicker:NO];
}
}
对于那些用resignFirstResponder回复的人:我有这个并且它有效,但我需要在显示选择器时解除键盘。因此TF1和2有3个文本字段TF1,TF2,TF3,触摸它们会启动一个选择器,当用户选择一个选择器行时,文本字段将填充该值并且拾取器被解除。但是,如果您首先转到TF2,则会显示键盘,您可以通过返回键或texfieldDidEndEditing将其解除。但是说你没有输入任何文字但是触摸TF1或3,现在显示了选择器,但键盘仍然在屏幕上。即使使用self.view endEditing
,我也无法解雇答案 0 :(得分:0)
尝试关闭键盘时,请对UITextView使用以下委托方法:
- (BOOL)textFieldShouldReturn:(UITextField*)textField {
[textField resignFirstResponder];
return NO;
}
确保添加代理
emailTextField.delegate = self
您应该在实施选择器之前实现此目的。
答案 1 :(得分:0)
您可以使用textFieldShouldReturn委托方法:
- (BOOL)textFieldShouldReturn:(UITextField*)textField
{
[textField resignFirstResponder];
return NO;
}
OR
如果您有多个文本字段并且不知道哪个是第一响应者(或者您只是无法从编写此代码的任何地方访问文本字段),则可以在包含父视图的内容上调用endEditing:文本字段。
[[self view] endEditing:YES];