首页 > 解决方案 > (iOS)viewcontroller弹出时如何删除行?

问题描述

我有一个UITableView. 当我单击一行时,它将推送一个详细视图控制器以显示详细信息。而且,如果用户单击详细视图控制器上的“完成”按钮,我需要弹出此控制器并删除 tableview 控制器上的行。

我尝试在详细视图上编写代码viewWillDisappear

if let vc = navigationController?.viewControllers[0] as? TodoViewController{
  vc.removeTodo(at:todoListIndex)
}

代码工作正常,但只是一个警告:

UITableView被告知在不位于视图层次结构中的情况下布局其可见单元格和其他内容(表视图或其父视图之一尚未添加到窗口中)。这可能会在没有准确信息的情况下强制表视图内的视图加载和执行布局(例如表视图边界、特征集合、布局边距、安全区域插入等),从而导致错误,并且还会由于额外的布局传递而导致不必要的性能开销.

那么,删除行的正确方法是什么?

标签: iosswift

解决方案


正如错误消息所暗示的那样,它会提醒您在视图不可见时避免更新视图。这通常发生在您更新某个viewWill____状态的视图时(在本例中viewWillDisappear)。

因此,您要做的是在viewDid___(例如viewDidAppear)生命周期中从 TableView 中删除单元格。然后,您将不再看到警告消息。

如果需要,您可以使用帮助flag membersobservables指导正确的删除时间。


推荐阅读