打开自定义表格视图单元格不会突出显示

时间:2018-06-20 07:48:59

标签: swift uitableview uiswitch

我在自定义表格视图单元格上进行了切换,该单元格允许用户注册通知并遇到以下问题:

如果用户通过单击索引0处的开关打开通知,然后滚动到底部(将索引0从页面上推下)然后向上滚动,则他们刚刚打开的索引0中的选项将再次显示关闭。

似乎该单元正在记住该设置,该设置是从第一次加载(关闭开关)起,并在该单元滚动离开页面然后重新打开时恢复为该设置。

如何使自定义单元上的开关记住已被更改?也许细胞被重用了?

1 个答案:

答案 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
}