【发布时间】:2021-01-26 21:55:38
【问题描述】:
我正在制作一个从 CloudKit 获取数据并将其显示在表格视图中的应用程序。在 viewDidLoad 结束时,我调用了一个不同的函数来获取这些数据并对其进行过滤。但是,我的 tableView numberOfRowsInSection 函数似乎在我的 fetching 函数之前被调用,所以我的 tableView 中没有行,因为还没有通过我的 fetching 函数,并且我分配为背景视图的视图弹出,因为它当我没有行时应该。我想知道,有没有办法在我的自定义函数结束时再次调用我的 tableView numberOfRowsInSection 函数,以便它可以更新 tableView?我知道如何调用普通函数:
function(any parameters here)
不过,我似乎不知道怎么称呼它:
tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
假设我无法将获取功能代码移动到 ViewDidLoad。
【问题讨论】:
-
不清楚,但我认为您误解了一个概念。您的调用确实是异步的,因此您稍后会填充数据。但与此同时,即使您还有 0 个数据,也必须渲染 tableView。所以在“启动”时调用 UITableViewDatasource 的所有必要方法是正常的。但是,一旦填充了数据,您可以做的是重新加载 tableview:
myTableView.reloadData()。如果需要,请将其放入DispatchQueue.main.async{}(因为 UI 需要在主线程中完成)。 -
@Larme 更新的问题,有点不清楚。谢谢,但我已经在调用重新加载数据。但问题是背景视图不会消失。我确实获取了数据,如果我的背景视图不在前面,它将显示出来。在我的 section 函数的行数中,我基本上已经放置了“如果没有过滤记录,则显示背景视图,反之亦然”。这就是为什么我想重新调用那个函数,所以它会在 if 语句中走另一条路,所以我的记录是可见的。
-
您应该包含相关代码。您的问题似乎不是如何调用
numberOfRows...(之前的评论已经解决),而是实际上如何从视图层次结构中删除视图。
标签: ios swift tableview cloudkit