为什么 "switch" 语句在设置 UICollectionView 的 header 时不起作用?
Why does "switch" statement not work in setting UICollectionView's header?
我想设置 collection 视图的 header,因此实现了方法 func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView
。
不过,switch语句好像不行;即使我试图通过根据部分进行分支来在 header 视图中设置标签,所有部分中的结果 header 视图都包含我编写的所有标签。
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,相互重叠。
为什么开关在我的情况下不起作用?
我的collection视图中的内容从服务器获取数据,因此print(indexPath.section)
执行了2次,分别打印出0
和1
,在那个顺序。
这与问题有关吗?
案例一
我认为您只有在收到服务器响应后才需要重新加载集合视图。并在视图中初始化 response/tableData 数组。
案例二
您可以尝试在切换条件下使用来自服务器的响应数组数据。
您正在向 header 视图添加一个新标签 每次出列时 。您应该在 header 中已经存在标签(作为原型、xib 文件或在初始化自定义 header class 时创建),并且只需在方法中每次设置文本在你的问题中。
如果不能这样做,您需要在创建标签之前检查标签是否存在。
我想设置 collection 视图的 header,因此实现了方法 func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView
。
不过,switch语句好像不行;即使我试图通过根据部分进行分支来在 header 视图中设置标签,所有部分中的结果 header 视图都包含我编写的所有标签。
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,相互重叠。
为什么开关在我的情况下不起作用?
我的collection视图中的内容从服务器获取数据,因此print(indexPath.section)
执行了2次,分别打印出0
和1
,在那个顺序。
这与问题有关吗?
案例一
我认为您只有在收到服务器响应后才需要重新加载集合视图。并在视图中初始化 response/tableData 数组。
案例二
您可以尝试在切换条件下使用来自服务器的响应数组数据。
您正在向 header 视图添加一个新标签 每次出列时 。您应该在 header 中已经存在标签(作为原型、xib 文件或在初始化自定义 header class 时创建),并且只需在方法中每次设置文本在你的问题中。
如果不能这样做,您需要在创建标签之前检查标签是否存在。