我有一个工作开关和一个开关状态,它使用Indexpath的行号和存储在字典中的bool来跟踪哪个开关被打开。虽然这只适用于一个部分。我正在困难时期阻止它蔓延到下一部分,如下所示:
Section 0 Row 3 switch turned on
Section 1 Row 3 switch turned on without me pressing it.
有没有办法只保留特定部分的开关?现在我使用两个原型单元,一个用于数据显示,其中只包含一个开关,另一个单元用于显示节标题。
以下是一些我认为有助于看到我放下的代码:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("advCell", forIndexPath: indexPath) as! advDataCell
cell.advDelegate = self
switch(indexPath.section) {
case 0:
cell.lblCategoryItem.text = foodCategories[indexPath.row]["name"]
case 1:
cell.lblCategoryItem.text = activitiesCategories[indexPath.row]["name"]
default:
return cell
}
if advSwitchStates[indexPath.row] != nil {
cell.advOnOffSwitch.on = advSwitchStates[indexPath.row]!
}
else {
cell.advOnOffSwitch.on = false
}
cell.advOnOffSwitch.on = advSwitchStates[indexPath.row] ?? false
return cell
}
func switchCell(advSwitchCell: advDataCell,didChangeValue value: Bool) {
let indexPath = tableView.indexPathForCell(advSwitchCell)!
print("This advanced filter controller has received the switch event.")
advSwitchStates[indexPath.row] = value
}
我用来存储开关状态:
var advSwitchStates = [Int: Bool]()
答案 0 :(得分:1)
在你的cellForRowAtIndexPath
中,你将一个回收的细胞出列,就像你应该做的那样。您需要完全配置单元格中的每个视图, IN ALL CASES 。这意味着在所有情况下,您都需要为advOnOffSwitch
设置一个值。
在cellForRowAtIndexPath
方法中,您有一个用于0,1或任何其他值的节值的switch语句。如果section值不是0或1,则返回时不设置advOnOffSwitch
的状态。如果您回收已设置advOnOffSwitch
的单元格,它将保持打开状态,这是您不想要的。像这样更改你的switch语句:
switch(indexPath.section) {
case 0:
cell.lblCategoryItem.text = foodCategories[indexPath.row]["name"]
case 1:
cell.lblCategoryItem.text = activitiesCategories[indexPath.row]["name"]
default:
cell.advOnOffSwitch.on = false
return cell
}
使用该代码,您可以将开关强制关闭,以便为第0或第1部分以外的部分启动。
答案 1 :(得分:0)
有两个不同的问题,首先在设置单元格名称时摆脱早期返回:
switch(indexPath.section) {
case 0:
cell.lblCategoryItem.text = foodCategories[indexPath.row]["name"]
default:
cell.lblCategoryItem.text = activitiesCategories[indexPath.row]["name"]
}
其次,由于您有多个部分,因此需要使用section和row作为键来跟踪切换状态。最简单的方法是使advSwitchStates的键成为NSIndexPath。
e.g。声明为:
var advSwitchStates = [NSIndexPath: Bool]()
然后在cellForRowAtIndexPath
中cell.advOnOffSwitch.on = advSwitchStates[indexPath] ?? false