我在自定义表格视图单元格上进行了切换,该单元格允许用户注册通知并遇到以下问题:
如果用户通过单击索引0处的开关打开通知,然后滚动到底部(将索引0从页面上推下)然后向上滚动,则他们刚刚打开的索引0中的选项将再次显示关闭。
似乎该单元正在记住该设置,该设置是从第一次加载(关闭开关)起,并在该单元滚动离开页面然后重新打开时恢复为该设置。
如何使自定义单元上的开关记住已被更改?也许细胞被重用了?
答案 0 :(得分:1)
您需要确保已存储数据以防止出现此问题。我将在viewDidLoad
中检查一个值,在选择开关时更新该值,然后在cellForRow
实例化该行时分配该值。
var toggleValue : Bool? // set variable to be used in class
override func viewDidLoad() {
// TODO: load value from wherever you store this value... User Defaults, Core Data, etc.,
if let value = storedData.value {
toggleValue = value
} else { toggleValue = false }
}
然后,当您加载单元格时:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellID", for: indexPath) as! YourCustomCell
if indexPath.row == 0 {
cell.switch.setOn(toggleValue!, animated: false)
}
}
然后在处理开关的切换的函数中,需要更新toggleValue
变量的值。像这样:
// obviously this wont work on it's own. You'll need an action or to observe the switch and call the function when appropriate.
func doSwitch() {
// check toggleValue and swap true/false
if switch.isOn {
toggleValue = false
} else { toggleValue = true }
// TODO: store the value somewhere like User Defaults
switch.setOn(toggleValue!, animated: true) // perform toggle
}