Uitableview 点击UIButton后从UITextfield捕获文本

Uitableview 点击UIButton后从UITextfield捕获文本,uitableview,ios5,uibutton,uitextfield,Uitableview,Ios5,Uibutton,Uitextfield,我在UITableView中嵌入了几个UITextFields,我的UIViewController类也设置为UITextFieldDelegate。我没有直接引用ViewController类中的UITextFields,只能通过访问给定NSIndexPath处特定UITableView的单元格来访问它们 每当用户点击UIButton的操作目标而调用它时,“-(void)textfieldDendediting:(UITextField*)textField。对于最后一个活动字段,尚未调用。如

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

每当用户点击UIButton的操作目标而调用它时,“
-(void)textfieldDendediting:(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]; //

有人能提出一个好的方法来做这件事吗?这似乎是一个标准问题,但我只是在找出答案方面有点慢。

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

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
textfielddidediting可以在按钮操作后调用,但是由于您已经在ivar中使用了它,所以不会有问题。但是最好的方法是,您可以检查textfield的输入并在中启用按钮

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

因此,每当在uitexfield中有有效输入时,请启用取消按钮。当您键入内容时,在将输入插入uitexfield之前,会调用ShouldChangeCharactersRange。

我不确定是否理解您的建议。调用“textFieldShouldEndEditing”时,我正在保存textField.text值。您的意思是在按钮点击事件到达时总是禁用UIButton,并且在调用shouldChangeCharactersRange时启用UIButton?我已经进一步澄清了我的问题。如果您在TextField之前保存该值,则应该删除该值。当操作触发时,您是否已经设置了该值?怎么办您的button action类中有end editing?问题是,在调用UIButton的目标之前,不会调用TextFieldShouldenEditing。所以当按钮的动作被处理时,我保存的内容不反映UITextField的当前内容。在这种情况下,请使用ShouldChangeCharactersRange中的textfield内容更新ivar,该内容不在按钮操作后调用的TextFieldsShouldEndediting中。您必须将替换字符串附加到NSmutablestring ivar以保存该值。在这种情况下,您将总是有最新的价值