UIButton 点击​​后从 UITextfield 捕获文本

Posted

技术标签:

【中文标题】UIButton 点击​​后从 UITextfield 捕获文本【英文标题】:Capturing text from UITextfield after UIButton tap 【发布时间】:2012-08-10 05:12:04 【问题描述】:

我在 UITableView 中嵌入了一些 UITextField,并且我的 UIViewController 类也设置为 UITextFieldDelegate。我没有直接引用 ViewController 类中的 UITextField,它们只能通过访问给定 NSIndexPath 处的特定 UITableView 的单元格来访问。

每当 UIButton 的动作目标由于用户点击而被调用时,'-(void)textFieldDidEndEditing:(UITextField *)textField.对于最后一个活动字段尚未调用。如何捕获最后一个活动字段中的文本?

我已经尝试设置标志来记录编辑的开始和结束以及其他一些解决方案,但这些似乎都不正确..

在我的 onButtonTap 动作处理程序中,如果我有这个:

[self.view endEditing:YES]; 
// would the call to 'textFieldDidEndEditing' happen synchronously and then return
// to this line or would they be async?
[self doActionLogic]; //

谁能提出一个好的技术来做到这一点?似乎这将是一个标准问题,但我在找出答案方面有点慢。

【问题讨论】:

【参考方案1】:

如果您只需要文本字段的输入,您可以在方法中将测试设置为 ivar 并返回 yes。

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField

textFieldDidEndEditing 可以在按钮操作之后调用,但由于您已经在 ivar 中拥有它,所以不会有问题。但最好的方法是,您可以检查文本字段的输入并启用按钮

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

因此,只要您在 uitexfield 中有有效输入,请启用您的取消按钮。在您输入内容时以及在将输入插入 uitextfield 之前调用shouldChangeCharactersInRange。

【讨论】:

我不确定我是否理解您的建议。调用“textFieldShouldEndEditing”时,我正在保存 textField.text 值。您的意思是在按钮点击事件到达时始终禁用 UIButton 并在调用 shouldChangeCharactersInRange 时启用 UIButton? 我已经进一步澄清了我的问题。 如果你在 textfieldshouldendEditing 之前保存值是好的。当动作触发时你已经设置了值吗?为什么你在按钮动作类中有结束编辑? 问题是 textFieldShouldEndEditing 直到 UIButton 的目标被调用后才会被调用。所以在处理按钮的动作时,我保存的内容并不能反映 UITextField 的当前内容。 在这种情况下,使用 shouldChangeCharactersInRange 中的文本字段内容更新您的 ivar,而不是在按钮操作后调用的 textFieldShouldEndEditing 内。您必须将替换字符串附加到您的 NSmutablestring ivar 以保存该值。在这种情况下,您将总是有最新的值

以上是关于UIButton 点击​​后从 UITextfield 捕获文本的主要内容,如果未能解决你的问题,请参考以下文章

填写所有 UITextField 时,UIButton 未启用

如何以编程方式更改UIButton标签

点击 UIButton 以编程方式创建另一个 UIButton

iOS-UIButton防止连续点击(点击抖动)

UIButton:使点击区域大于默认点击区域

让UIButton点击不变灰