告诉任何 UITextField 关闭

Posted

技术标签:

【中文标题】告诉任何 UITextField 关闭【英文标题】:Tell any UITextField to dismiss 【发布时间】:2011-01-31 14:28:52 【问题描述】:

如何将当前的firstResponder 告诉resign?我有一个UITableView 和一堆TextFields,我不知道哪个始终处于活动状态。我考虑过存储指向数组中所有单元格的指针并遍历它,将每个单元格告诉resignFirstResponder,但我确信有一种更简单的方法。也许像[CurrentFirstResponder resignFirstResponder] 这样的东西?

我会很感激你的帮助,法比安

编辑:我不想在用户点击完成时关闭键盘。它应该以编程方式被解雇。由于我不知道哪个UITextField 在任何时候都处于活动状态,因此我正在搜索当前FirstResponder 上调用resignFirstResponder 的东西。

【问题讨论】:

【参考方案1】:

您可以在UITextFieldDelegate Protocol 上使用textFieldDidBeginEditing: 保留对正在积极编辑的 UITextfeild 的引用,或者您可以使用父视图执行此操作:

UIView * myParentViewView;//view containing one or more editable UI controls 
[myParentViewView endEditing:YES];

【讨论】:

刚才也想出来了 :) 问题是我的 UITextField 包含在自定义 UITableViewCell 中,但我添加了一个新的委托方法,将 - (void)textFieldDidBeginEditing:(UITextField *)tf 发送给委托。然后我有一个实例变量......【参考方案2】:

希望这能解决你的问题,

将委托分配给 UItextField,

textField.delegate=self;

然后在下面的方法中

    - (void)textFieldDidBeginEditing:(UITextField *)textField
    
//This for to resign on begin editing
    [textField resignFirstResponder];
    

 - (void)textFieldDidEndEditing:(UITextField *)textField
    
//This for to resign on end editing
    [textField resignFirstResponder];
    

如果您不希望 textField 可编辑,那么,

textField.editing=NO;

设置标签以区分您的文本字段

【讨论】:

【参考方案3】:

只需使用 UITextFieldDelegate (reference)。每当调用- (BOOL)textFieldShouldReturn:(UITextField *)textField 时,执行[textField resignFirstResponder],因为此方法总是使用当前活动的文本字段调用。 如果您仍然需要区分文本字段,请尝试设置标签并将其与 if(textfield.tag == self.mytextfield.tag) ... 一起使用

【讨论】:

以上是关于告诉任何 UITextField 关闭的主要内容,如果未能解决你的问题,请参考以下文章

点击 UITextField 时如何阻止键盘显示?

带有关闭按钮的令牌

触摸 UITextField 以外的任何地方时如何关闭键盘(快速)?

在 UITextField 之外的任何地方关闭触摸键盘

编辑 UITextField 时如何关闭键盘

Swift:UITextField 被键盘隐藏