每次关闭时如何重置视图?
Posted
技术标签:
【中文标题】每次关闭时如何重置视图?【英文标题】:How to reset view each time its closed? 【发布时间】:2011-08-04 18:28:22 【问题描述】:我有一个显示联系信息的表格视图。我有另一种观点,它充当“接触板”。基本上它有空行或文本填充行。当用户点击表格视图上的按钮时,我希望它有空行(或默认状态),并且我希望它在用户点击表格视图上的一行时预填充文本。我的数据源写入/读取方法工作正常,但是一旦“接触板”视图被调出;它保存了它的状态。
例如,如果我用按钮打开“接触板”视图,那么它会显示正确的默认状态。然后,如果我通过点击一行打开“接触板”视图,它将显示正确的文本,但如果我尝试通过按钮再次打开它,那么它将不会重新显示默认状态,而是会显示文本从以前开始。
视图关闭后如何重置?我是否在 [self removeFromSuperview] 之前调用 dealloc()?
【问题讨论】:
【参考方案1】:在viewWillAppear
方法中,只需做一个
[self.tableView reloadData];
每次有导航或每次打开视图时都会调用此方法。
【讨论】:
reloadData 不知道要执行哪个状态。我在 cellForRowAtIndexPath: 期间使用 if 来更改状态,但问题是我正在测试的变量在视图关闭后不会重置。我在 init 和 viewDidLoad 方法中设置了它的值,但是这些方法在视图加载一次后不会被调用。我需要以编程方式将其从内存中删除。我怎样才能做到这一点? 哈哈。您面临的问题不在于代码。它只需要一个良好的逻辑布局。我会简单地使用NSUserDefaults
在视图之间进行通信并检查上一个屏幕中的更改,并基于此我在viewWillAppear
中采取行动
@crzrcn 您可以尝试在 viewWillDisAppear 方法中重置变量的值。【参考方案2】:
请记住,在您将视图添加为子视图后,它的保留计数会增加 1。 因此,如果您从超级视图中删除它,它会下降 1。您应该在将子视图添加到另一个视图后释放它。这样,当您调用 removeFromSuperview 时,它会减一并完全释放。
【讨论】:
以上是关于每次关闭时如何重置视图?的主要内容,如果未能解决你的问题,请参考以下文章