【问题标题】:iOS UITextField- dismissing custom inputViewiOS UITextField-关闭自定义 inputView
【发布时间】:2011-06-30 12:31:19
【问题描述】:

我正在为某些文本字段使用自定义 inputView,但是当我在文本字段上调用 ​​resignFirstResponder 时,自定义输入视图不会关闭...有什么建议吗?

UITextField *f=[[UITextfield alloc] init];
 UIView *view=[[UIView alloc] initWithFrame..];
   [f setInputView:view]; //random example of how to set a textfields input view to a custom view

经过一些研究,此问题仅在使用模态视图中呈现的 viewController 时才会出现......否则它工作正常......

谢谢

-丹尼尔

【问题讨论】:

  • 通过自定义文本字段,你的意思是你有一个UITextField的对象?可以发一些代码吗?
  • 我的意思是 UITextfield 的 inputView 属性,查看代码的 sn-p
  • 您还有这个问题吗?你有调用 resignFirstResponder 的代码吗?因为那应该可以工作

标签: ios uitextfield inputview


【解决方案1】:

您应该在视图本身或其任何父视图上调用endEditing:,而不是调用resignFirstResponderendEditing: 将在所有子视图中搜索任何具有第一响应者状态的视图,并要求其辞职。

endEditing: 将布尔标志作为参数。如果设置,它将强制第一响应者辞职;否则,您可以让它保持焦点(例如,如果输入无效)。对于 UITextField,这由委托的 shouldEndEditing: 方法确定。

一般来说,一个好的模式是:

- (void)saveAction:(id)sender
{
    if ([self.view endEditing:NO]) {
        NSString *text = self.textField.text;
        // save text, login, do whatever
    } else {
        // show an alert (or rely on whatever refused to resign to inform the user why)
    }
}

【讨论】:

  • 这对我不起作用。如果视图只是普通窗口的一部分,它似乎可以正常工作,但如果它在模式窗口中,键盘不会消失。有什么想法吗?
  • 您必须在第一响应者视图的父视图上调用 endEditing:。如果不知道您的视图层次结构,很难确切地说出什么会起作用,但您可以尝试self.view.window[[UIApplication sharedApplication] keyWindow]
  • 酷,我会试试窗口一。我肯定会打电话给父母,但它似乎不起作用,谢谢!
【解决方案2】:

如果您使用模式视图,请确保启用自动键盘关闭。将此代码添加到您的视图控制器:

- (BOOL)disablesAutomaticKeyboardDismissal
{
    return NO;
}

【讨论】:

  • 对于任何有机会回答这个问题的人:这个答案是正确的解决方案,而不是关于调用 endEditing 的解决方案。在此处查看类似的问答:stackoverflow.com/questions/3372333/…
猜你喜欢
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
相关资源
最近更新 更多