【问题标题】:How to manually call "tableView numberOfRowsInSection" function如何手动调用“tableView numberOfRowsInSection”函数
【发布时间】: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


【解决方案1】:

您不会直接致电numberOfRowsInSection。只需像这样在您的tableView 上调用reloadData()

yourAsynchronousFunctionThatGetsYourDataFromCloudKit(){ records in
  //Set your data source with the CKRecords you got from CloudKit
  self.items = records

  //Reload the table
  self.tableView.reloadData()
}

//This gets called by reloadData()
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  return items.count
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多