0

在我的应用程序中,我有一个视图,它是一个有很多输入的表单。当 UITextField 调用textFieldDidBeginEditing时,它会检查标签并根据输入的含义显示 UIPopoverController 或键盘。

如果键盘启动,我需要它在用户按下弹出弹出框的文本字段时消失。但是我不能让它消失,我已经尝试了各种方法来摆脱键盘,但它只是留在那里。我试过了:

  • 呼入resignFirstResponder_textFieldDidEndEditing
  • 呼入[self.view endEditing:YES]_textFieldDidEndEditing
  • 在检查前一个标签时调用resignFirstResponderAND等于键盘输入文本字段。[self.view endEditing:YES]textFieldDidBeginEditing

任何想法都会很棒。

如果有人想查看确切的行为,我已将其撕掉并将其放入示例项目中。 http://dl.dropbox.com/u/61692457/KB_Test.zip

4

2 回答 2

2

在 .h 文件中声明一个全局 UITextField

UITextField *txtfld;

将您的方法 textFieldDidBeginEditing 替换为 textFieldShouldBeginEditing ,现在编写此代码

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{

if (textField.tag == 1 || textField.tag==3)
{

    if(numPickerPopover == nil)
    {   

        numPicker = [[[NumPicker alloc] initWithStyle:UITableViewStylePlain] autorelease];

        numPicker.delegate = self;

        numPickerPopover = [[UIPopoverController alloc] initWithContentViewController:numPicker];
        [numPickerPopover setPopoverContentSize:CGSizeMake(60.0, 260.0f)];
    }

    [numPickerPopover presentPopoverFromRect:textField.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

    [txtfld resignFirstResponder];
    return NO;
}


if (textField.tag == 2)

{

    txtfld = textField;

    return YES;
}

return YES;    

}
于 2012-06-29T04:24:03.600 回答
0

要在用户触摸启动它的 textField 时关闭键盘,请添加以下方法:

- (IBAction)dismissKeyboard:(id)sender {

    [textField resignFirstResponder];
}

在 Interface Builder 中,将此方法连接到您想要的 textField 事件,例如在内部进行修饰(或任何更合适的方法)。

于 2012-06-29T03:03:25.010 回答