ios - 包含 UITableView 和 UICollectionView 的 UISegmentedControl

标签 ios swift

我有一个包含 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/

相关文章:

ios - Apple 应用内购买 - 购买定制内容

ios - UIBlurEffect 在设备上不模糊但在模拟器中有效

ios - 如何在 swift 4 的 Collection View 中刷新数据?

ios - 我如何利用 PageViewController 根据用户的输入生成新的页面 View ?

ruby - Swift 相当于 Ruby 的 "yield"

ios - moveRowAtIndexPath - 在部分之间移动单元格

ios - Objective-C:在核心数据中设置 bool 值

ios - iOS检测短信发送失败

ios - NSLocationWhenInUseUsageDescription 警告,但我已经添加了它

swift - 如何修复复制/粘贴 Xcode 时损坏的缩进