作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的例子中,我正在将 JSON
数据加载到 tableview
中。在这里,实现了 tableview 单元格多单元格选择 checkmark
和 uncheckmark
选项。如果转到上一个 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/
我是一名优秀的程序员,十分优秀!