【问题标题】:delete multiple items from tableview list in swift快速从表格视图列表中删除多个项目
【发布时间】:2016-06-03 06:48:43
【问题描述】:

在我检查了我的 tableview 列表中的多个项目后,我想将它们从我的列表中删除并将它们添加到收藏夹列表中。

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    //this is to make multiple selections in list
    tableView.cellForRowAtIndexPath(indexPath)?.accessoryType = UITableViewCellAccessoryType.Checkmark

    //this gives me an array for rowsSelected
    let rowsSelected = self.tableView.indexPathsForSelectedRows!.map{$0.row}
    completeList.removeAtIndex(rowsSelected)

    //tried this alternative - not sure what type "selection" is here
    let selection = tableView.indexPathsForSelectedRows{
    completeList.removeAtIndex(rowsSelected)
    }

【问题讨论】:

    标签: arrays swift uitableview selection


    【解决方案1】:

    为了能够从您的表格视图中删除项目,您应该开始反向删除。这样就不会发生您遇到的问题。例如,如果您想从数组中删除 2,4,6 [1, 2,3,4,5,6]您应该从 6 开始删除到 2。更清楚地说,您应该从最底部的单元格开始删除,然后索引不会超出范围。

    例子:

    if let indexPaths = tableView.indexPathsForSelectedRows  {
        //Sort the array so it doesn't cause a crash depending on your selection order.
        let sortedPaths = indexPaths.sorted {$0.row > $1.row}
                for indexPath in sortedPaths {
    
                    let count = array.count
    
                    var i = count-1
    
                    for i in stride(from: i, through: 0, by: -1) {
    
                        if(indexPath.row == i){
    
                            array.remove(at: i)
    
                        }
                    }
                }
                tableView.deleteRows(at: sortedPaths, with: .automatic)
            }
    

    【讨论】:

      【解决方案2】:

      斯威夫特 3

      离开 EmirC 的回答我遇到了困难,因为它删除了 indexPaths 数组中较早的行,然后出现不连续性并最终崩溃,所以我想出了这个解决方案,对数组进行排序以解决问题。

          if let indexPaths = tableView.indexPathsForSelectedRows  {
      
              let sortedArray = indexPaths.sorted {$0.row < $1.row}
      
              for i in (0...sortedArray.count-1).reversed() {
      
                  Tasks.remove(at: sortedArray[i].row)
              }
              tableView.deleteRows(at: sortedArray, with: .automatic)
          }
      

      【讨论】:

      • 这个逻辑是正确的。但是我意识到这会导致崩溃,具体取决于您选择行的顺序。索引路径也必须从大到小排序。更正为“让 sortedPaths = indexPaths.sorted {$0.row > $1.row}”解决了这个问题。感谢您指出需要对数组进行排序:)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-15
      相关资源
      最近更新 更多