gpt4 book ai didi

ios - 重新启动 View Controller 后,Swift Tableview 复选标记消失

转载 作者:行者123 更新时间:2023-11-28 11:24:35 26 4
gpt4 key购买 nike

在我的例子中,我正在将 JSON 数据加载到 tableview 中。在这里,实现了 tableview 单元格多单元格选择 checkmarkuncheckmark 选项。如果转到上一个 viewcontroller 并再次返回 tableview controller,则最后选择的复选标记消失。如何存储它?

JSON 可编码

// MARK: - Welcome
struct Root: Codable {
let status: Bool
let data: [Datum]
}

// MARK: - Datum
struct Datum: Codable, Hashable {
let userid, firstname, designation: String?
let profileimage: String?
}

自定义单元格类

class MyCustomCell: UITableViewCell {
@IBOutlet weak var profileImage: UIImageView!
@IBOutlet weak var nameCellLabel: UILabel!
@IBOutlet weak var subtitleCellLabel: UILabel!
}

Tableview Checkmark代码

 var studentsData = [Datum]()
var sessionData = Set<Datum>()

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell:MyCustomCell = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! MyCustomCell
let item = self.studentsData[indexPath.row]
cell.nameCellLabel.text = item.firstname
cell.subtitleCellLabel.text = item.designation
return cell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let item = self.studentsData[indexPath.row]
if let cell = tableView.cellForRow(at: indexPath) {
if cell.accessoryType == .checkmark {
cell.accessoryType = .none

// UnCheckmark cell JSON data Remove from array
self.sessionData.remove(item)
print(sessionData)

} else {
cell.accessoryType = .checkmark

// Checkmark selected data Insert into array
self.sessionData.insert(item)
print(sessionData)
}
}
}

最佳答案

创建一种在数据结构中存储复选标记状态的方法

struct Datum: Codable, Hashable {
let userid, firstname, designation: String?
let profileimage: String?
var selected: Bool = false
}

创建单元格时设置值

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell:MyCustomCell = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! MyCustomCell
let item = self.studentsData[indexPath.row]
cell.nameCellLabel.text = item.firstname
cell.subtitleCellLabel.text = item.designation
cell.accessoryType = item.selected ? .checkmark : .none
return cell
}

然后在 didSelectRowAt 中将 if block 替换为以下内容以将更改保存回学生数据,然后相应地重置复选标记:

 self.studentsData[indexPath.row].selected.toggle()
cell.accessoryType = studentsData[indexPath.row].selected ? .checkmark : .none

关于ios - 重新启动 View Controller 后,Swift Tableview 复选标记消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58699088/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com