【问题标题】:ios Hiding the Keyboardios 隐藏键盘
【发布时间】:2013-01-12 19:33:56
【问题描述】:

我的问题是:What is the best way to implement "Hiding Keyboard while PickerView (which is inside the PopOver) is Visible"?

我想要什么:

我有一个视图,其中包含 15 TextFields。在 15 个中,比如说 7 个使用 UIPickerView(位于 UIPopOverController 中)来实现 DropDown Functionality。我的问题是当键盘可见并且我用UIPickerView 单击UITextField 时,键盘没有隐藏。实现这一点的最佳方法是什么?

我尝试了什么:

我尝试实现inputView,但它仅用于UIPickerView,而我在UIPopOverController 中有UIPickerView。我认为这就是我无法使用 inputView 属性的原因。根据这个Question,是苹果的Bug。

更新

看,我知道使用 textField Delegates ,我们可以实现这一点。但是我找到了UITextFieldinputView 属性,我发现它很有趣,因为您只需将其分配为:

textField.inputView = pickerView;

但我在PopOver 中有UIPickerView。那么如何使用UITextField中的inputView property呢?

还有更好的主意吗?...

【问题讨论】:

  • 只有两种方法可以做到这一点 resignFirstResponder 或成为FirstResponder 由其他控件。你还有什么办法??

标签: iphone keyboard uitextfield uipickerview uipopovercontroller


【解决方案1】:

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

1) 将您的UITextField 替换为UIButton 并将其连接到某个选择器(buttonClicked:)。您可以使用UIButtonTypeCustom 对其进行样式设置,使其看起来像文本字段(设置图层的边框颜色、边框宽度、角半径等)

2) 在此方法中 -(void)buttonClicked:(id)sender - 切换相同的 UIPickerView,您将用作替换 UITextField 的 inputView。您可以在普通实例变量中创建,只需记住设置委托和数据源。将它附加到根视图(您的UIViewController 在弹出窗口中显示)甚至UIWindow 并根据它是否已经显示来对其进行动画处理(切换)。

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

希望这会有所帮助。

【讨论】:

  • 由于这里没有太多好的答案,我接受你的答案。
【解决方案2】:

将 .h 文件中的对象作为:

id currentTextField;

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

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

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

[currentTextField resignFirstResponder];

万事如意!!!

【讨论】:

  • 只需检查我在问题中的更新。
  • 好的,感谢您的努力。
猜你喜欢
  • 1970-01-01
  • 2016-05-30
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多