2012-02-17 36 views
2

我有一个多视图的过程,用户输入数据,我将它保存到模型类属性的每一步。textFieldDidEndEditing“太晚了”

我用textFieldDidEndEditing来检查输入是否有效,如果是,保存输入的数据。

在视图上,我有一个continueButtonClicked事件,检查是否所有的验证通过,如果是的话加载下一个视图。我不在这里设置模型的属性,因为我认为我不应该因为每个字段一次保存到模型1字段。但是,我注意到了一些问题。

如果用户位于文本框内并单击“继续”按钮,continueButtonClicked事件将在触发textFieldDidEndEditing之前触发。最后发生的事情是,在textFieldDidEndEditing发生保存之前,下一个视图将填入“旧”模型。

我错过了什么?继续设置所有属性是否合适?如果我是为网络编程,那么我会这样做,但对于本机应用程序来说这似乎不太合适。

回答

1

你可以试试这个,看看是否可以解决你的问题?

textFieldShouldEndEditing: 
+0

太棒了!这似乎解决了这个问题。我有点困惑,为什么textFieldShouldEndEditing会触发两次:在continueButtonClick为ALL字段之前,并且在continueButtonClick事件触发后第二次为活动字段。这似乎是无害的,但只是好奇。 – jaySF 2012-02-17 03:17:30

+0

如果它是你真正想要的活动的那个,你总是可以通过测试是否是第一响应者来确定它。 – mbh 2012-02-17 04:29:45

4

您可以在活动文本框/文本视图(或全部文本视图)上调用resignFirstResponder,这将触发textFieldDidEndEditing

一般来说,对于这样的文本编辑问题,另一种方法是滥用代理方法,您可以在其中确定输入的每个字符的新值。如果没有其他方法,则只应回到此方法。

+0

谢谢。我会研究这种方法,当我得到一些时间 - 只是为了包裹我的头。上面的mbh的解决方案刚刚碰巧对我来说更快,但我对此也很好奇 – jaySF 2012-02-17 03:19:06