gpt4 book ai didi

ios - 在 swift 中关闭 tableView 后再次查看复选标记

转载 作者:行者123 更新时间:2023-11-30 14:00:30 25 4
gpt4 key购买 nike

我有一个包含 3 个部分(服务、可用性和天数)的 TableView ,每个部分中有多个行。我实现了一个,以便在选择任何行时看到复选标记。现在,我想在第一次关闭表格后再次显示表格时再次看到选定的行。就像显示所选项目的历史记录一样。

这是显示复选标记的代码:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let indPath = indexPath
let section = indPath.section
switch section {
case 0:
updateCell(indPath, select: true)
case 1:
updateCell(indPath, select: true)
case 2:
updateCell(indPath, select: true)
default:
Void()
}
}

override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
let indPath = indexPath
let section = indPath.section
switch section {
case 0:
updateCell(indPath, select: false)
case 1:
updateCell(indPath, select: false)
case 2:
updateCell(indPath, select: false)
default:
Void()
}
}

func updateCell(indexpath: NSIndexPath, select: Bool) {
if let cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: indexpath.row, inSection: indexpath.section)) {
if select{
cell.accessoryType = .Checkmark
}
else {
cell.accessoryType = .None
}
}//end if cell

现在是我从所选行获取数据的方法:

func save(){
if let indexPaths = self.tableView.indexPathsForSelectedRows{
for indexPath in indexPaths{
switch indexPath.section{
case SectionIndex.Services.rawValue:
switch indexPath.row{
case ServicesIndex.Recieve.rawValue:
selectedServices.insert("RECEIVE")
case ServicesIndex.Send.rawValue:
selectedServices.insert("SEND")
default:
Void()
}//end switch
case SectionIndex.Availability.rawValue:
switch indexPath.row{
case AvailabiltiyIndex.Morning.rawValue:
selectedAvailabilities.append(6.0...9.0)
case AvailabiltiyIndex.Regular.rawValue :
selectedAvailabilities.append(9.0...18.0)
case AvailabiltiyIndex.Evening.rawValue:
selectedAvailabilities.append(18.0...21.0)
default:
Void()
}//end switch
case SectionIndex.Days.rawValue:
switch indexPath.row{
case DaysIndex.Sunday.rawValue:
selectedDays.insert("Sunday")
case DaysIndex.Monday.rawValue:
selectedDays.insert("Monday")
case DaysIndex.Tuesday.rawValue:
selectedDays.insert("Tuesday")
case DaysIndex.Wednesday.rawValue:
selectedDays.insert("Wednesday")
case DaysIndex.Thursday.rawValue:
selectedDays.insert("Thursday")
case DaysIndex.Friday.rawValue:
selectedDays.insert("Friday")
case DaysIndex.Saturday.rawValue:
selectedDays.insert("Saturday")
default:
Void()
}//end switch
default:
Void()
}//end switch
}//end for
}//end If
}//end save

最佳答案

表格 View 关闭后,选择状态本身就会丢失。如果不关心它,它只是 View 管理的状态的一部分。

在您的 save 方法中,您正在存储“选择状态”。您可以使用这些 selectedServicesselectedAvailitiesselectedDays 变量来存储选择状态。如果第二次显示 TableView 时仍然有这些,您可以从中提取选择状态。

您可能会从此更改 updateCell 调用:

updateCell(indPath, select: false)

对此:

updateCell(indPath, select: selectionState(indPath))

并定义一个像这样的方法:(注意selectedServices.contains("RECEIVE"))

func selectionState(indexpath: NSIndexPath) -> Bool {
let indPath = indexPath
let section = indPath.section
switch section {
case 0:
switch indexPath.row{
case ServicesIndex.Recieve.rawValue:
return selectedServices.contains("RECEIVE")
...
case 1:
updateCell(indPath, select: false)
case 2:
updateCell(indPath, select: false)
default:
Void()
}
}

contains 方法实际上从数据模型中提取选择状态(这些实例由 selectedServices 等引用)。如果无法实现 contains 方法,您可能必须创建一个仅存储选择状态的数据结构。然后,您从该数据结构中读取选择状态,并将选择状态写入数据结构和 selectedServices 等实例。

关于ios - 在 swift 中关闭 tableView 后再次查看复选标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33057299/

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