【问题标题】:textFieldDidEndEditing firing "too late"textFieldDidEndEditing 触发“为时已晚”
【发布时间】:2012-02-17 02:14:03
【问题描述】:

我有一个用户正在输入数据的多视图过程,并且我将其保存到模型类属性中的每一步。

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

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

如果用户在文本框内并单击“继续”按钮,则 continueButtonClicked 事件在 textFieldDidEndEditing 之前触发。最终发生的情况是,在 textFieldDidEndEditing 中进行保存之前,下一个视图填充了“旧”模型。

我错过了什么?在 Continue 上设置所有属性是否合适?如果我为 Web 编程,我会这样做,但对于原生应用程序来说似乎不合适。

【问题讨论】:

    标签: ios iphone objective-c uitextfield uitextfielddelegate


    【解决方案1】:

    您可以在活动文本字段/文本视图(或所有这些)上调用resignFirstResponder,这将触发textFieldDidEndEditing

    一般来说,对于此类文本编辑问题,另一种方法是滥用-textField:shouldChangeCharactersInRange:... 委托方法,您可以在其中确定输入的每个字符的新值。只有在没有其他方法的情况下,您才应该恢复使用此方法。

    【讨论】:

    • 谢谢。当我有时间时,我也会研究这种方法 - 只是为了绕开它。 mbh上面的解决方案碰巧让我尝试更快,但我也对这个很好奇
    【解决方案2】:

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

    textFieldShouldEndEditing:
    

    【讨论】:

    • 太棒了!这似乎解决了这个问题。我对为什么 textFieldShouldEndEditing 会触发两次感到有些困惑:一次是在所有字段的 continueButtonClick 之前,第二次是在 continueButtonClick 事件触发之后的活动字段。它似乎无害,但只是好奇。
    • 如果它是你真正想要的活跃的,你总是可以通过测试那是否是第一响应者来确定。
    猜你喜欢
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多