我有一个填充表格视图的数组 - 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
}
答案 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()
调用。