为什么“switch”语句在设置UICollectionView的头文件时不起作用?

时间:2015-12-09 05:56:46

标签: ios swift uicollectionview uicollectionreusableview

我想设置集合视图的标头,从而实现方法func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView

但是,似乎开关语句不起作用;即使我试图通过根据部分分支来设置标题视图中的标签,所有部分中的结果标题视图都包含我写的所有标签。

func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {
    switch kind {
    case UICollectionElementKindSectionHeader:
        let headerView = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "Header", forIndexPath: indexPath)
        let headerLabel = UILabel(frame: CGRectMake(2, 8, 120, 24))
        headerView.addSubview(headerLabel)

        print(indexPath.section)
        switch (indexPath.section) {
        case 0:
            headerLabel.text = "A"
            return headerView
        case 1:
            headerLabel.text = "B"
            return headerView
        default:
            break
        }

        return headerView

    default:
        assert(false, "Unexpected element kind")
    }
}

在上面的代码中,两个部分的标签都有标签 A B ,相互重叠。

为什么开关在我的情况下不起作用?

我的收藏夹视图中的内容从服务器获取数据,因此print(indexPath.section)执行2次,每次打印出01,按此顺序。

这与问题有关吗?

2 个答案:

答案 0 :(得分:1)

每次出列时,您都会在标题视图中添加新标签。您应该在标题中显示标签(作为原型,xib文件或在初始化自定义标头类时创建),并且每次只在问题的方法中设置文本。

如果您不能这样做,则需要在创建之前检查标签是否存在。

答案 1 :(得分:-1)

案例1

我认为只有在收到服务器的响应后才需要重新加载集合视图。并初始化视图中的response / tableData数组将会出现。

案例2

您可以在切换条件下尝试使用来自服务器的响应数组数据。