哪个 UITextField 委托方法将被调用而无需重新设置键盘?

Posted

技术标签:

【中文标题】哪个 UITextField 委托方法将被调用而无需重新设置键盘?【英文标题】:Which UITextField delegate method will be called without resing keyboard? 【发布时间】:2012-02-10 02:54:44 【问题描述】:

我的情况是,用户在没有退出键盘的情况下将数据输入 UITextField,他按下下一步按钮转到下一页。

That textfield is in custom cell with UITextView。现在我想在用户输入时捕获该 UITableView 的每个文本字段和 UITextView 中的所有内容,因为在单击 Next 按钮时我需要保存数据。

到目前为止,我已经实现了以下方法,但是当用户在 TextField 中输入数据并直接按下一步按钮而不返回键盘时,这些方法都没有被调用

- (void)textFieldDidEndEditing:(UITextField *)textField


    NSString *strTitle = [textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    textField.text = strTitle;





- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
   

    return YES;


- (BOOL)textFieldShouldEndEditing:(UITextField *)textField

    [textField resignFirstResponder];
    return YES;

在 Next 之前从 TextFields 中保存的最佳方法是什么?

【问题讨论】:

如果您的“下一步”按钮触发选择器,您可以从该选择器的文本字段中获取数据。如果没有 - 您在哪里编写了调用新控制器/页面的代码? 这个“下一步”按钮是什么?你有没有改变键盘上的返回键?它只是您视图中的某个按钮吗?是在导航栏上吗? 【参考方案1】:

textFieldDidEndEditing 在失去焦点时并不总是被调用。见帖子https://***.com/a/1229914/641062。它解释了有关 endEditing 方法行为的更多信息。

所以必须用这种方法保存你的数据。这将要求您输入的每个字符。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
   

    return YES;

【讨论】:

【参考方案2】:

至少其中一个肯定应该被调用。

可能是非常简单的事情:您是否仔细检查过实现这些方法的类实际上已被指定为相关 UITextField 的委托?

【讨论】:

yes.UITextFieldDidEndEditing 在用户返回键盘时被调用,但我的情况是,如果用户没有返回键盘并直接按下下一步按钮,我将如何在该文本字段中存储数据? 哦,我误会了。这很奇怪...... textFieldDidEndEditing: 应该在字段失去第一响应者状态时调用,无论机制如何。我将不得不尝试重现...【参考方案3】:

如果您只想在用户点击下一个按钮时知道您的文本字段和文本视图的内容,那么您不需要知道将调用哪个委托方法,您可以简单地在下一个按钮的 IBAction 方法中获取这些值

-(IBAction)nextButtonTapped 
    textFieldData = myTextField.text;
    textViewData =  myTextView.text;

   //code to push the next view goes here

希望这会有所帮助!

【讨论】:

【参考方案4】:

如果您使用的是自定义单元格,请使用此单元格

[[(CustomCellName *)[tableViewName cellForRowAtIndexPath:indexPathOfRowNo] textFieldName] text];

【讨论】:

以上是关于哪个 UITextField 委托方法将被调用而无需重新设置键盘?的主要内容,如果未能解决你的问题,请参考以下文章

自定义 UITextField 委托方法 shouldChangeCharactersIn 没有被调用

如何在 XIB 中调用 UITextField 的委托方法?

如何在不同的 Objective-C 类中调用 UITextField 委托方法?

搜索栏子视图不起作用,搜索栏未调用 UITextField 委托方法

如何确定正在编辑 UITableView 中的哪个节标题

退格键不调用 uitextfield 的方法