Ios 在Swift中对表格视图排序后维护选定单元格

Ios 在Swift中对表格视图排序后维护选定单元格,ios,swift,uitableview,swift3,selection,Ios,Swift,Uitableview,Swift3,Selection,我有一个启用了多重选择的表视图。用户应该能够在列表中选择多个选项,然后更改列表的排序顺序。我希望能够选择相同的单元格,但它们的顺序将从排序更改。我看不到实现这一点的方法,因此任何建议都值得赞赏。如果您的数据结构中有一个“已选择”的指示器,您可以使用它来重建tableView选择 如果不能向数据中添加这样的指标,可以分两步执行排序:1)计算新元素索引,2)将这些索引应用于数据数组以执行排序 使用排序索引,可以基于原始索引的新位置重建选择: 例如: // Assuming your tablevie

我有一个启用了多重选择的表视图。用户应该能够在列表中选择多个选项,然后更改列表的排序顺序。我希望能够选择相同的单元格,但它们的顺序将从排序更改。我看不到实现这一点的方法,因此任何建议都值得赞赏。

如果您的数据结构中有一个“已选择”的指示器,您可以使用它来重建tableView选择

如果不能向数据中添加这样的指标,可以分两步执行排序:1)计算新元素索引,2)将这些索引应用于数据数组以执行排序

使用排序索引,可以基于原始索引的新位置重建选择:

例如:

// Assuming your tableview is named "tableView",
// and the data array is named "dataArray",
// and you sort uses a member of dataArray called "sortKey"


// prepare list of new indexes for sorted data
let newIndexes   = dataArray.enumerated().sorted{ $0.1.sortKey < $1.1.sortKey }.map{$0.0}

// determine new indexes of current selection
let newSelection = tableView.indexPathsForSelectedRows?
                   .map{IndexPath(row:newIndexes.index(of:$0.row)!, section:0)}

// sort and reload the data                            
dataArray        = newIndexes.map{ self.dataArray[$0] }
tableView.reloadData()

// reapply the selection
tableView.indexPathsForSelectedRows?.forEach{tableView.deselectRow(at:$0, animated:false)}
for indexPath in newSelection ?? []
{ self.tableView.selectRow(at: indexPath, animated: false, scrollPosition: .none) }
//假设您的tableview名为“tableview”,
//数据数组名为“dataArray”,
//然后使用名为“sortKey”的dataArray成员进行排序
//为已排序的数据准备新索引列表
让newIndexes=dataArray.enumerated().Sorded{$0.1.sortKey<$1.1.sortKey}.map{$0.0}
//确定当前选择的新索引
让newSelection=tableView.indexPathsForSelectedRows?
.map{indepath(行:newIndexes.index(of:$0.row)!,节:0)}
//排序并重新加载数据
dataArray=newIndexes.map{self.dataArray[$0]}
tableView.reloadData()
//重新应用所选内容
tableView.indexPathsForSelectedRows?.forEach{tableView.DeceloseRow(at:$0,动画:false)}
对于新闻选举中的Indexath??[]
{self.tableView.selectRow(at:indepath,动画:false,滚动位置:.none)}

为什么不使用选择了属性的自定义单元格,并按您想要的方式切换该属性?这样,您就可以知道在使用
selected
属性对表视图进行排序后选择了哪些单元格。调用tableView.reloadData()后,我对单元格的引用是否相同?