删除indexPath swift部分

时间:2016-01-04 15:40:33

标签: ios arrays swift uitableview nsindexpath

我有一个填充表格视图的数组 - myPosts。

表视图的第一行不是数组的一部分。

每一行都是它自己的部分(有自己的自定义页脚)

我正在尝试使用以下代码执行删除:

   func tableView(profileTableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
            if (editingStyle == UITableViewCellEditingStyle.Delete) {
                myPosts?.removeAtIndex(indexPath.section - 1)
                profileTableView.beginUpdates()
                let indexSet = NSMutableIndexSet()
                indexSet.addIndex(indexPath.section - 1)
                profileTableView.deleteSections(indexSet, withRowAnimation: UITableViewRowAnimation.Automatic)
                profileTableView.deleteRowsAtIndexPaths([indexPath],  withRowAnimation: UITableViewRowAnimation.Automatic)
                profileTableView.endUpdates()
                ...
                WS Call 
                ...
            }
}

日志报告以下内容:

  

无效更新:第0部分中的行数无效   行中包含的行           更新后的现有部分(1)必须等于其中包含的行数       更新前的部分(1),加上或减去插入或删除的行数       该部分(插入0,删除1)并加上或减去移入或移出的行数       该部分(0移入,0移出)。'

显然这个问题与0移入,0移出有关但我不明白为什么会这样?或解决方案是什么?

tableView中的部分数量如下:

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        if self.myPosts == nil
        {

            return 1
        }
        return self.myPosts!.count + 1
    }

2 个答案:

答案 0 :(得分:7)

所以答案就是删除删除行的行。

所以代码在这里删除:

 func tableView(profileTableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
        if (editingStyle == UITableViewCellEditingStyle.Delete) {
            myPosts?.removeAtIndex(indexPath.section - 1)
            profileTableView.beginUpdates()
            let indexSet = NSMutableIndexSet()
            indexSet.addIndex(indexPath.section - 1)
            profileTableView.deleteSections(indexSet, withRowAnimation: UITableViewRowAnimation.Automatic)
           // profileTableView.deleteRowsAtIndexPaths([indexPath],  withRowAnimation: UITableViewRowAnimation.Automatic)
            profileTableView.endUpdates()
            ...
            WS Call 
            ...
        }
   }

答案 1 :(得分:5)

更新了 Swift 3.0 的答案,并做了一些额外的调整:

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {
        myPosts?.removeAtIndex(indexPath.section - 1)
        let indexSet = IndexSet(arrayLiteral: indexPath.section)
        profileTableView.deleteSections(indexSet, with: .automatic)
        // Perform any follow up actions here
    }
}

不需要使用beginUpdates()endUpdates(),因为您只执行一个包含动画的操作。如果你做2个或更多,那么值得将它们组合起来以获得流畅的效果。

此外,这会使用Swift 3类,取消NSMutableIndexSet()调用,现在需要转换才能使用deleteSections()调用。