我有一个包含 1 个 SegmentedControl 的 ViewController,它具有三个段,以及 TableView 和 CollectionView。选择段时,前两个段显示带有两个不同自定义 TableviewCell 的 TableView,最后一个显示 CollectionView。选择每个 segemet 调用网络功能来下载数据以填充 TableView 或 CollectionView。该应用程序默认显示第一段的 TableView。问题是当我启动该应用程序时,该应用程序在 numberOfItemsInSection 函数中崩溃,因为它没有任何要填充的数据。我认为这个函数被称为数据源,CollectionView 的委托(delegate)属性被设置为“self”(ViewController)。我应该如何解决这个问题?
最佳答案
好的,所以您可能正在将此数据下载到 JSON 字典或数组中,因此您最初可以将表和 Collection View 设置为没有内容,如下所示:
class ViewController : UIViewController, UITableViewDataSource, UITableViewDelegate, UICollectionViewDataSource, UICollectionViewDelegate {
// note that I would recommend separating these into extensions on ViewController
var htmlResponses = []()
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return htmlResponses.count
// htmlResponses is empty at this point
}
override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return htmlResponses.count
// htmlResponses is empty at this point
}
}
然后,一旦您的数据进入,只需用所述数据填充 htmlResponses
数组并调用 tableView.reloadData()
和 collectionView.reloadData()
分别用于 TableView 和 Collection View 。
即使您不使用数组来存储数据,概念也是一样的。使用空元素填充您的 View ,并在您知道数据已从服务器到达后重新加载它们。
关于ios - 包含 UITableView 和 UICollectionView 的 UISegmentedControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36348254/