我怎样才能在userdefault中保存选中的tableview行?

时间:2018-08-18 19:38:06

标签: userdefaults checkmark

我正面临与此问题相同的问题:

how can i store selected rows of tableview in nsuserdefaults in swift 3

但是,我有兴趣知道如何用选中的已保存行重新填充吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

使用didSet创建一个变量,以便在将值分配给表后重新加载表。

var selectedRows: [Int] = [] {
    didSet {
        myTableView.reloadData()
    }
}

viewDidLoad()上,从selectedRowsuserDefaults赋值

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")
}

我希望这会有所帮助。让我知道您是否有任何困惑。

谢谢