【问题标题】:keyboard is not getting dismissed on UITextFieldUITextField 上的键盘没有被解除
【发布时间】:2012-01-13 06:02:08
【问题描述】:

这听起来可能是一个新手问题,但我是 iOS 开发新手。

平台:iPad

我有一个带有 UITextField 的 UITableView,假设它们是两个。 当按下第一个虚拟键盘时应该会出现,但是当用户点击第二个 UITextField 时,虚拟键盘应该被隐藏并且应该显示数据选择器视图。

就是这样,我是怎么做到的。

-(void) textFieldDidBeginEditing:(UITextField *)textField {
    if (textField.tag == PICKER_VIEW_TAG) {
        [textField resignFirstResponder];
    } else {
        ...
    }
}

-(void) textFieldDidEndEditing:(UITextField *)textField
{
    if (textField.tag != PICKER_VIEW_TAG) {
        ...
    }
}

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    if (textField.tag == PICKER_VIEW_TAG) {
        [self countriesPickerView];
    }
    return YES;
}

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    if (textField.tag == PICKER_VIEW_TAG) {
        [textField resignFirstResponder];
    } else {
        ... 
    }
    return YES;
}

所以现在的问题是,当我第一次单击第一个 UITextField 时,它会显示键盘,但是当我切换到第二个时,它不会隐藏它。为什么 ?以及如何解决这个问题?

更新:相应的 textField 没有被选中,但即发生了辞职,对吧?但是键盘没有隐藏……为什么会这样?

【问题讨论】:

  • 您是否设置了 texfields 的委托并确保调用了委托方法? textfield.delegate = self;

标签: iphone ios ipad uitextfield


【解决方案1】:

问题在于您的 textFieldShouldReturn。如果您希望它完成操作,请允许它在退出第一响应者时返回。

[textField resignFirstResponder];
return YES;

【讨论】:

  • 更新后的代码还是一样的效果,让键盘出现在第一个UITextField上后,当我点击第二个时,键盘没有隐藏。
  • 我假设你在你的头文件中添加了你的 UITextFieldDelegate,所以它知道调用这些被覆盖的方法?
  • 当然,我已经把它添加到标题中了
  • 问题是我希望当我点击特定的 UITextField 时隐藏键盘,返回返回的内容并不重要......
  • 尝试在你的 shouldBeginEditing 中辞职。 if (textField == yourTextField) [yourTextField resignFirstResponder];
【解决方案2】:

UITextField 上设置inputView 属性以显示键盘以外的视图以接收输入。在这种情况下,您可以将文本字段的inputView 设置为UIDatePicker 的一个实例。选择器将自动显示相同的键盘动画,您可以删除一堆代码。双赢。

【讨论】:

    猜你喜欢
    • 2015-10-06
    • 2011-04-05
    • 1970-01-01
    • 2012-02-05
    • 2012-09-21
    • 2018-07-03
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    相关资源
    最近更新 更多