【问题标题】:Code execution after viewDidAppear?viewDidAppear 之后的代码执行?
【发布时间】:2026-01-20 17:30:01
【问题描述】:

好的,我遇到了一个奇怪的问题,这导致我提出问题 - 在 vi​​ewDidAppear 之后是否有任何代码运行?

这里有更多信息。我有一个带有自定义单元格的 tableViewController (TVC)。其中一个单元有一个按钮作为附件。加载此 TVC 时,会设置按钮的 backgroundColor。使用按钮选择单元格会显示一个带有颜色选择器 (CPVC) 的视图控制器。当 CPVC 被关闭时,它首先运行 onDismissal 块(在 TVC 中设置)用于调整 TVC 中按钮的颜色。到目前为止,代码运行良好,并且在关闭颜色选择器视图控制器时设置了按钮的颜色。

我发现的问题是在按钮的颜色设置后,由于某种原因,它会在 ~0.25 秒后重置为以前的颜色。您可以看到在颜色选择器集中选择的颜色,然后按钮的颜色会转换为之前的颜色。我不明白为什么会这样。当我在调试器中检查局部颜色变量时,它们都被更新为新颜色,并且不确定对先前颜色的引用仍然存在于何处。我已经将NSLog 语句插入到TVC 的viewDidAppear 方法中,并验证了在颜色选择器关闭后,按钮的颜色设置为用户在viewDidAppear 方法结束时选择的任何颜色。只是之后颜色会发生变化。在viewDidAppear 之后运行的是什么?

【问题讨论】:

  • 使用更新单元格中按钮颜色的代码更新您的问题。还包括您的cellForRowAtIndexPath。另请注意,默认情况下,UITableViewController 在其viewDidAppear 中取消选择当前选定的行。所以也许取消选择正在重置颜色。

标签: ios uiviewcontroller viewdidappear


【解决方案1】:

用户 rmady 引导我朝着正确的方向前进。从来不知道 UITableViewControllers 会在 viewWillDisappear 上重置 tableView。根据文档:

当表格视图第一次加载时即将出现时,表格视图控制器会重新加载表格视图的数据。每次显示表视图时,它也会清除其选择(有或没有动画,取决于请求)。 UITableViewController 类在超类方法 viewWillAppear: 中实现了这一点。您可以通过更改 clearsSelectionOnViewWillAppear 属性中的值来禁用此行为。

所以我所要做的就是将clearsSelectionOnViewWillAppear 设置为“否”,然后一切正常。谢谢rmady

【讨论】: