iOS隐藏键盘

4

我的问题是:在弹出框中带有UIPickerView时如何隐藏键盘?

我的需求:

我有一个视图,其中包含约15个文本字段。其中7个使用UIPickerView(位于UIPopOverController中)来实现下拉功能。我的问题是当键盘可见并且我点击具有UIPickerViewUITextField时,键盘不会自动隐藏。如何最好地实现此功能?

我尝试过:

我尝试了使用inputView,但它只用于UIPickerView,而我将UIPickerView放在了UIPopOverController中。因此,我无法使用inputView属性。根据这个提问,这是Apple的错误。

更新:

我知道我们可以通过使用textField委托来解决这个问题。但是我发现了UITextFieldinputView属性,并且我觉得它非常有趣,因为你只需要将它分配为:

textField.inputView = pickerView;

但是我有一个在弹出窗口中的 UIPickerView。那么如何使用 UITextFieldinputView 属性

有更好的想法吗?...


只有两种方法可以实现这个功能,即使用resignFirstResponder或者becomeFirstResponder通过其他控件。你还发现了其他的方法吗? - CRDave
2个回答

0
在你的.h文件中,将一个对象定义为:
id currentTextField;

在你的 .m 文件中实现这个 UITextField Delegate 方法:

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    currentTextField = textField;
}
  • 不要忘记为文件中的所有UITextFields设置txtField.delegate = self

现在,当您收到pickerView按钮的点击时,请首先在该按钮的点击方法上添加一个语句:

[currentTextField resignFirstResponder];

祝你一切顺利!!!


1
请查看我在问题中的更新。 - Bhavin
好的,谢谢你的努力。 - Bhavin

0

我猜你不能直接这样做(像inputView那样)。你可以尝试这个简单的解决方法:

1)用UIButton替换你的UITextField,并将其连接到某个选择器(buttonClicked:)。你可以使用UIButtonTypeCustom来使它看起来像文本框(设置图层的bordeColor、borderWidth、cornerRadius等)

2)在这个方法-(void)buttonClicked:(id)sender中-切换相同的UIPickerView,你会用它作为替换的UITextField的输入视图。你可以把它变成普通的实例变量,只要记得设置委托和数据源。将它附加到根视图(在你的UIViewController中显示在弹出窗口中)甚至是UIWindow,并根据它是否已经显示来进行动画化进出(切换)。

3)在UIPickerViewDelegate方法中更新按钮的文本(使用[button setTitle:<selected_value> forState:UIControlStateNormal]):`pickerView:didSelect...atIndex: - 你还可以在这里隐藏选择器..

希望这能帮到你。


由于这里没有太多好的答案,我接受了你的回答。 - Bhavin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接