我想从多个 tableView 选择中创建一个数组
I want to create an array from multiple tableView selection
//this gives me an array for multiple rows selected in a tableView.
let rowsSelected = self.tableView.indexPathsForSelectedRows!.map{[=10=].row}
打印语句为我提供了这样的结果,用于选择第 2 行和第 5 行......[2.5]。
我现在想从当前列表中删除这两行。我正在努力寻找创建简化数组的正确概念。字典或使用 NSIndexPath?
假设您的数据源数组的名称是 tableData
,您可以使用这些行。
数据源数组和table视图中的项目必须同时删除,sort
和forEach
函数用于删除从最高索引开始的项目.
if let selectedIndexPaths = self.tableView.indexPathsForSelectedRows {
let indexes = selectedIndexPaths.map{[=10=].row}.sort(>) // sort descending
indexes.forEach{tableData.removeAtIndex([=10=])}
tableView.deleteRowsAtIndexPaths(selectedIndexPaths, withRowAnimation:.Fade)
}
@vadian 的答案很接近,但很危险;请参阅我对他的回答的评论。
要修复它,您必须先反转 要删除的索引数组。要了解原因,运行 游乐场中的以下几行:
let indicesToDelete = [4, 8]
var array = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
let goodReducedArray = indicesToDelete.reverse().map { array.removeAtIndex([=10=]) }
goodReducedArray // prints ["i","e"]
let badReducedArray = indicesToDelete.map { array.removeAtIndex([=10=]) }
badReducedArray // barfs EXC_BAD_INSTRUCTION
所以@vadian 代码的更正版本将是:
if let selectedIndexPaths = self.tableView.indexPathsForSelectedRows {
selectedIndexPaths.reverse().map{tableData.removeAtIndex([=11=].row)}
tableView.deleteRowsAtIndexPaths(selectedIndexPaths, withRowAnimation:.Fade)
}
//this gives me an array for multiple rows selected in a tableView.
let rowsSelected = self.tableView.indexPathsForSelectedRows!.map{[=10=].row}
打印语句为我提供了这样的结果,用于选择第 2 行和第 5 行......[2.5]。
我现在想从当前列表中删除这两行。我正在努力寻找创建简化数组的正确概念。字典或使用 NSIndexPath?
假设您的数据源数组的名称是 tableData
,您可以使用这些行。
数据源数组和table视图中的项目必须同时删除,sort
和forEach
函数用于删除从最高索引开始的项目.
if let selectedIndexPaths = self.tableView.indexPathsForSelectedRows {
let indexes = selectedIndexPaths.map{[=10=].row}.sort(>) // sort descending
indexes.forEach{tableData.removeAtIndex([=10=])}
tableView.deleteRowsAtIndexPaths(selectedIndexPaths, withRowAnimation:.Fade)
}
@vadian 的答案很接近,但很危险;请参阅我对他的回答的评论。
要修复它,您必须先反转 要删除的索引数组。要了解原因,运行 游乐场中的以下几行:
let indicesToDelete = [4, 8]
var array = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
let goodReducedArray = indicesToDelete.reverse().map { array.removeAtIndex([=10=]) }
goodReducedArray // prints ["i","e"]
let badReducedArray = indicesToDelete.map { array.removeAtIndex([=10=]) }
badReducedArray // barfs EXC_BAD_INSTRUCTION
所以@vadian 代码的更正版本将是:
if let selectedIndexPaths = self.tableView.indexPathsForSelectedRows {
selectedIndexPaths.reverse().map{tableData.removeAtIndex([=11=].row)}
tableView.deleteRowsAtIndexPaths(selectedIndexPaths, withRowAnimation:.Fade)
}