2012-08-10 71 views
0

我有一个带有textfields的customcells的tableview。我现在面临一个奇怪的问题:如何避免在目标c中的某些情况下额外调用-textFieldDidEndEditing?

  1. 当我点击第一行文本字段时,-beginEditing被调用。
  2. 现在我改变数值并点击第二行文本框。所以,第一行的-didEndEditing被调用。在这个didEnd中,我有一些解析方法在其他类中调用。但他们现在不执行。在didEnd之后,调用第二行文本的-beginEditing。之后,解析发生。到现在为止,没关系。
  3. 解析完成后,解析对象设置在其他类中,流程应该停在这里,但我不知道从哪里和为什么,第二行的-didEndEditing被调用!另外,虽然任何resignfirstresponders不是写在任何地方,键盘被解雇!

任何线索为什么会发生这种情况,以及如何解决它?

回答

0

这是苹果设计系统的方式 - 所有的开发人员都必须处理它(对或错)。关键是你得到了“textField”属性,所以你知道其中一个textField正在发送委托消息。

解决方法是使用一个或多个可变字典(或某些数据结构)为每个单独的textField保留状态。您可以有一个使用textField对象作为键的主字典,然后为每个textField使用一个具有当前状态的字典,以及任何其他想要保留的信息。

你可能会破解一个不太优雅但更易于编码的解决方案。在任何情况下,这些消息都有重叠,无法避免。

编辑:使用标记作为键,或创建一个非保留的NSValue指针对象,但不要使用文本字段本身。