iOS键盘不会被解雇

时间:2015-09-22 12:59:21

标签: ios keyboard uitextfield

我的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

,我也无法解雇

2 个答案:

答案 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];