我正面临与此问题相同的问题:
how can i store selected rows of tableview in nsuserdefaults in swift 3
但是,我有兴趣知道如何用选中的已保存行重新填充吗?
谢谢!
答案 0 :(得分:1)
使用didSet
创建一个变量,以便在将值分配给表后重新加载表。
var selectedRows: [Int] = [] {
didSet {
myTableView.reloadData()
}
}
在viewDidLoad()
上,从selectedRows
向userDefaults
赋值
override func viewDidLoad() {
super.viewDidLoad()
selectedRows = UserDefaults.standard.value(forKey: "selectedRows") as? [Int] ?? []
}
使用此代码更新单元格。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .default, reuseIdentifier: "myCell")
cell.textLabel?.text = "\(indexPath.row)"
cell.accessoryType = selectedRows.contains(indexPath.row) ? .checkmark : .none
return cell
}
最后在didSelectRowAt
中,使用此逻辑更新selectedRows
变量并将其存储到userDefaults
。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if selectedRows.contains(indexPath.row) {
self.selectedRows = selectedRows.filter{$0 != indexPath.row}
}else{
self.selectedRows.append(indexPath.row)
}
UserDefaults.standard.set(selectedRows, forKey: "selectedRows")
}
我希望这会有所帮助。让我知道您是否有任何困惑。
谢谢