【发布时间】:2018-03-13 15:14:47
【问题描述】:
我有一个collection view,其中包含三个不同的单元格。每个单元格都包含一个table view。所以,有三个table views。我已经为它们中的每一个设置了标签(从 1 到 3)。
现在,在我的view controller 上(当我将collection view 的单元格出列时,我将其设置为table view 的data source)我调用table view 的data source 方法来获取行数。为了区分table views,我检查了每个人的标签。这是代码:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch tableView.tag {
case 1:
if unitItems1 != nil {
return unitItems1!.count
} else {
return 0
}
case 2:
if unitItems2 != nil {
return unitItems2!.count
} else {
return 4
}
case 3:
if unitItems3 != nil {
return unitItems3!.count
} else {
return 4
}
default:
return 0
}
}
问题是,当显示collection view 的第一个单元格(第一个table view)时,它工作正常。但是当我滚动到第二个单元格时,case 2 和 case 3 都会被执行。之后,第二个table view 按预期显示数据,但是当我滚动到第三个时,该方法没有被调用。
我不明白为什么两个case 语句被一个接一个地调用,而第一个单元格的一切正常。如果您对为什么会发生这种情况有任何想法(或者,您可以建议一种更好的方法来检查 table view's),我将非常感谢您的帮助。
【问题讨论】:
-
与您的实际问题无关,但您可以通过将
if/else替换为return unitItems2?.count ?? 4之类的内容来简化每个case。 -
@rmaddy,感谢您的建议。我一定会改变那部分!
-
我会验证 tableView 指针实际上是相同的。 numberOfRowsInSection 可能会执行不止一次,因为它被 UITableView 的多个实例调用,而不是像您认为的那样通过 switch 语句。
-
@Dare,抱歉,您所说的“tableView 指针”是什么意思?
-
您的 collectionView 可能会使第 2 个和第 3 个单元格出列,因此您会收到一个对单元格 2 中表格的调用和另一个对单元格 3 中表格的调用(实际上是单元格 1 和 2,因为它是零基于)。
标签: ios swift uitableview switch-statement