在不同部分的单元格中添加多个复选标记,并将其状态保存在swift ios中
在我的应用程序中,我有5个部分,其中包含一些数据。我要做的是勾选第一部分的2个单元格,然后第二部分的3个单元格,以此类推。“工作”中不同部分的多个选择以及在该单元格中被选中的任何单元格,我都有一个标签标题,我正在添加该标题并存储在userdefaults中,因为我需要在上一个屏幕中显示该标题。现在,当我从第1节中选择了2个单元格,从第2节中选择了2个单元格并返回时,上一个屏幕中只显示了最新的选择单元格标题,这是错误的,它应该显示4个标题,以逗号分隔,这是我在上一个屏幕中编写的代码。不知道该怎么办 我的密码:-在不同部分的单元格中添加多个复选标记,并将其状态保存在swift ios中,ios,swift,row,checkmark,Ios,Swift,Row,Checkmark,在我的应用程序中,我有5个部分,其中包含一些数据。我要做的是勾选第一部分的2个单元格,然后第二部分的3个单元格,以此类推。“工作”中不同部分的多个选择以及在该单元格中被选中的任何单元格,我都有一个标签标题,我正在添加该标题并存储在userdefaults中,因为我需要在上一个屏幕中显示该标题。现在,当我从第1节中选择了2个单元格,从第2节中选择了2个单元格并返回时,上一个屏幕中只显示了最新的选择单元格标题,这是错误的,它应该显示4个标题,以逗号分隔,这是我在上一个屏幕中编写的代码。不知道该怎么办
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "allAssetCell", for: indexPath) as! AllAssetCell
var mainArr = [SymName]()
if indexPath.section == digitalIndex
{
mainArr = isSearch ? filtereddigitalArr : digitalArr
}
else if indexPath.section == forexIndex
{
mainArr = isSearch ? filteredforexArr : forexArr
}
else if indexPath.section == stocksIndex
{
mainArr = isSearch ? filteredstocksArr : stocksArr
}
else if indexPath.section == cryptoIndex
{
mainArr = isSearch ? filteredcryptoArr : cryptoArr
}
else if indexPath.section == commoditiesIndex
{
mainArr = isSearch ? filteredcommoditiesArr : commoditiesArr
}
else if indexPath.section == etfIndex
{
mainArr = isSearch ? filteredetfArr : etfArr
}
else
{
mainArr = isSearch ? (filtereddigitalArr + filteredforexArr + filteredstocksArr + filteredcryptoArr + filteredcommoditiesArr + filteredetfArr) : (digitalArr + forexArr + stocksArr + cryptoArr + commoditiesArr + etfArr)
}
cell.lblSymbolsName.text = mainArr[indexPath.row].name
cell.accessoryType = mainArr[indexPath.row].isSelected ? .checkmark : .none
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
tableView.deselectRow(at: indexPath, animated: true)
var mainArr = [SymName]()
var filteredMainArr = [SymName]()
if indexPath.section == digitalIndex
{
if isSearch
{
filtereddigitalArr[indexPath.row].isSelected.toggle()
let selectedNames = filtereddigitalArr.filter{$0.isSelected}.map{$0.name}
UserDefaults.standard.set(selectedNames, forKey: "selectedNames")
if selectedNames.count > 0
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
}
else
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
}
}
else
{
digitalArr[indexPath.row].isSelected.toggle()
let selectedNames = digitalArr.filter{$0.isSelected}.map{$0.name}
UserDefaults.standard.set(selectedNames, forKey: "selectedNames")
if selectedNames.count > 0
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
}
else
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
}
}
}
else if indexPath.section == forexIndex
{
if isSearch
{
filteredforexArr[indexPath.row].isSelected.toggle()
let selectedNames = filteredforexArr.filter{$0.isSelected}.map{$0.name}
UserDefaults.standard.set(selectedNames, forKey: "selectedNames")
if selectedNames.count > 0
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
}
else
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
}
}
else
{
forexArr[indexPath.row].isSelected.toggle()
let selectedNames = forexArr.filter{$0.isSelected}.map{$0.name}
UserDefaults.standard.set(selectedNames, forKey: "selectedNames")
if selectedNames.count > 0
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
}
else
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
}
}
}
else if indexPath.section == stocksIndex
{
if isSearch
{
filteredstocksArr[indexPath.row].isSelected.toggle()
let selectedNames = filteredstocksArr.filter{$0.isSelected}.map{$0.name}
UserDefaults.standard.set(selectedNames, forKey: "selectedNames")
if selectedNames.count > 0
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
}
else
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
}
}
else
{
stocksArr[indexPath.row].isSelected.toggle()
let selectedNames = stocksArr.filter{$0.isSelected}.map{$0.name}
UserDefaults.standard.set(selectedNames, forKey: "selectedNames")
if selectedNames.count > 0
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
}
else
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
}
}
}
else if indexPath.section == cryptoIndex
{
if isSearch
{
filteredcryptoArr[indexPath.row].isSelected.toggle()
let selectedNames = filteredcryptoArr.filter{$0.isSelected}.map{$0.name}
UserDefaults.standard.set(selectedNames, forKey: "selectedNames")
if selectedNames.count > 0
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
}
else
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
}
}
else
{
cryptoArr[indexPath.row].isSelected.toggle()
let selectedNames = cryptoArr.filter{$0.isSelected}.map{$0.name}
UserDefaults.standard.set(selectedNames, forKey: "selectedNames")
if selectedNames.count > 0
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
}
else
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
}
}
}
else if indexPath.section == commoditiesIndex
{
if isSearch
{
filteredcommoditiesArr[indexPath.row].isSelected.toggle()
let selectedNames = filteredcommoditiesArr.filter{$0.isSelected}.map{$0.name}
UserDefaults.standard.set(selectedNames, forKey: "selectedNames")
if selectedNames.count > 0
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
}
else
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
}
}
else
{
commoditiesArr[indexPath.row].isSelected.toggle()
let selectedNames = commoditiesArr.filter{$0.isSelected}.map{$0.name}
UserDefaults.standard.set(selectedNames, forKey: "selectedNames")
if selectedNames.count > 0
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
}
else
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
}
}
}
else if indexPath.section == etfIndex
{
if isSearch
{
filteredetfArr[indexPath.row].isSelected.toggle()
let selectedNames = filteredetfArr.filter{$0.isSelected}.map{$0.name}
UserDefaults.standard.set(selectedNames, forKey: "selectedNames")
if selectedNames.count > 0
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
}
else
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
}
}
else
{
etfArr[indexPath.row].isSelected.toggle()
let selectedNames = etfArr.filter{$0.isSelected}.map{$0.name}
UserDefaults.standard.set(selectedNames, forKey: "selectedNames")
if selectedNames.count > 0
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
}
else
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
}
}
}
else
{
mainArr = digitalArr + forexArr + stocksArr + cryptoArr + commoditiesArr + etfArr
filteredMainArr = filtereddigitalArr + filteredforexArr + filteredstocksArr + filteredcryptoArr + filteredcommoditiesArr + filteredetfArr
if isSearch
{
filteredMainArr[indexPath.row].isSelected.toggle()
let selectedNames = filteredMainArr.filter{$0.isSelected}.map{$0.name}
UserDefaults.standard.set(selectedNames, forKey: "selectedNames")
if selectedNames.count > 0
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
}
else
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
}
}
else
{
mainArr[indexPath.row].isSelected.toggle()
let selectedNames = mainArr.filter{$0.isSelected}.map{$0.name}
UserDefaults.standard.set(selectedNames, forKey: "selectedNames")
if selectedNames.count > 0
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
}
else
{
ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
}
}
}
tableView.reloadRows(at: [indexPath], with: .none)
}
您需要在didSelect方法之外声明这两个变量
var mainArr = [SymName]()
var filteredMainArr = [SymName]()
因为当你选择一个单元格时,它会创建一个新的数组,而之前的数组会被丢弃。使用UserDefaults在视图控制器之间发送数据真的是一个很好的解决方案吗?你不应该直接在它们之间发送数据吗?也许在这里使用委托模式?也许您可以通过在发布的代码中不包含太多的部分来让代码更清晰。也许可以将代码缩减为两个部分,使代码更清晰但仍然全面