【问题标题】:Inputs do not reset after clicking cancel button and reopening the view单击取消按钮并重新打开视图后输入不会重置
【发布时间】:2020-11-25 10:23:54
【问题描述】:

我有一个带有一些文本字段、切换和选择器的表单。一切正常,除了当我在文本字段上输入内容并单击取消按钮并重新打开表单时,输入仍然存在。就是不知道为什么。

现在,我正在开发的应用程序非常庞大。因此,无法共享所有内容,但我的 btnCancelClicked 方法如下所示:

- (IBAction)btnCancelClicked:(id)sender {
    if(onCompletion) {
        onCompletion(self.myView, YES);

    }
}

实现取消按钮的逻辑是什么?关闭视图而不保存用户输入的分步过程是什么?我想了解这背后的问题可能是什么。感谢您的帮助。

编辑[self.myView setNeedsDisplay];[self.myView setNeedsLayout]; 没有帮助。

Edit2: TextViews 也可以正常工作,这意味着当我键入内容然后单击取消并重新打开时,视图处于其初始状态。唯一的问题是文本字段。我应该为他们做些不同的事情吗?

【问题讨论】:

  • 这可能是故意的 - 查看 VC 或文本字段是否在情节提要中具有 恢复 id。 iOS 允许您以多种方式进行状态恢复,我猜这是使用其中一种方式。 developer.apple.com/documentation/uikit/uiviewcontroller/…
  • @skaak 感谢您的建议,但在检查器中恢复 id 字段看起来是空的。我现在会检查链接。
  • @skaak 我认为这与您发布的链接中提到的内容无关。
  • 好的——如果你打算保留文本的话。否则,如答案中所述,视图仍保留在内存中。 setNeedsDisplay / Layout 与它无关(我侦察)。也许显示视图是如何呈现的以及显示onCompletion 块。我认为当您呈现视图时,有一些逻辑与取消的onCompletion 互操作,以便视图以某种方式保留在内存中 - 可能是故意在取消后返回? - 并再次呈现。

标签: objective-c forms uitextfield cancel-button


【解决方案1】:

关闭视图后,视图仍在内存中。因此,您可以按原样获得所有输入的值。你有两种方法可以达到你想要的结果:

  1. 关闭视图后,将其设置为 nil。在您进行演示时创建一个新视图。
  2. 在呈现您的视图之前,以编程方式重置您的控件。

您提到 TextViews 运行良好,TextViews 是手动创建的吗?

【讨论】:

  • 感谢您的回答。我应该通过self.view = nil 的btnCancelClicked 方法将视图设置为nil 吗?或者我应该在 ViewDidDisappear 中执行此操作吗?是的,它们都是手动创建的,并在 DidBeginEditing 方法中分配给 textFields 和 textViews。
  • 我不确定,这个 self.view 用于完成你最后调用的所有东西。您可以在完成处理程序中设置,您将在其中获取 self.view。
  • 我在完成处理程序中使用 self.view = nil ,即 btnCancelClicked 方法中的 onCompletion 块,但是没有观察到任何变化。可能是因为我只是在改变自我,但改变发生在其他地方,将自我设置为 nil 没有任何影响?
  • 每次添加到视图时都尝试创建一个新的self.view。
  • 我没明白你的意思。你能详细说明一下吗?
猜你喜欢
  • 2017-12-21
  • 2019-08-29
  • 2014-01-01
  • 2019-11-20
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
  • 2022-12-22
  • 2018-10-13
相关资源
最近更新 更多