为啥“switch”语句在设置 UICollectionView 的标题时不起作用?
Posted
技术标签:
【中文标题】为啥“switch”语句在设置 UICollectionView 的标题时不起作用?【英文标题】:Why does "switch" statement not work in setting UICollectionView's header?为什么“switch”语句在设置 UICollectionView 的标题时不起作用? 【发布时间】:2015-12-09 05:56:45 【问题描述】:我想设置集合视图的标题,从而实现方法func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView
。
但是,switch 语句似乎不起作用;即使我尝试通过根据部分分支来在标题视图中设置标签,所有部分中的结果标题视图也包含我编写的所有标签。
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 次,每次打印出 0
和 1
,按此顺序。
这和问题有关吗?
【问题讨论】:
【参考方案1】:您正在向标题视图添加一个新标签每次出列时。您应该在标头中已经存在标签(作为原型、xib 文件或在自定义标头类初始化时创建),并且每次只需在问题的方法中设置文本。
如果您不能这样做,则需要在创建标签之前检查标签是否存在。
【讨论】:
【参考方案2】:案例 1
我认为只有在从服务器获得响应后才需要重新加载集合视图。并会出现初始化视图中的response/tableData数组。
案例 2
您可以尝试在切换条件下使用来自服务器的响应数组数据。
【讨论】:
以上是关于为啥“switch”语句在设置 UICollectionView 的标题时不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
为啥这个 switch 语句在运行时会结束 while 循环?