【问题标题】:How to delete all rows of section in Swift如何在 Swift 中删除部分的所有行
【发布时间】:2018-08-25 22:48:25
【问题描述】:

我正在编写一个代码,我必须在选择一个部分时插入和删除所有行。

下面是插入和删除的代码

var paths = [IndexPath]()
for row in 0..<(arrayOfSection?.count)! {
    let indexPath = IndexPath(row: row, section: selectedIndex!)
    paths.append(indexPath)
}

// Toggle collapse
if previousSelectedIndex != nil && previousSelectedIndex == section {

    self.arrayOfCategories?.removeAll()
    self.catergoryTableView.beginUpdates()
    self.catergoryTableView.deleteRows(at: paths, with: .fade)
    self.catergoryTableView.endUpdates()
}
else{
    self.catergoryTableView.beginUpdates()
    self.catergoryTableView.insertRows(at: paths, with: .fade)
    self.catergoryTableView.endUpdates()
    header.setCollapsed(false)
    //scroll
    let sectionRect = self.catergoryTableView.rect(forSection: selectedIndex!)
    self.catergoryTableView.scrollRectToVisible(sectionRect, animated: true)
}

previousSelectedIndex = selectedIndex

插入行工作正常,但是当我尝试从所选部分删除行时出现错误

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“尝试从第 0 部分删除第 9 行,更新前仅包含 0 行”

我做错了什么?

【问题讨论】:

  • 不相关但 - 一如既往 - beginUpdates / endUpdates 对单个惰性/移动/删除操作完全没有影响。调用insertRows/deleteRows之前必须在数据源中插入/删除对应的项
  • 如果删除数据源,则无法一次插入、删除一行。一次重新加载表或删除相应索引处的数据源。
  • 您应该尝试删除以下代码self.arrayOfCategories?.removeAll()
  • 您是否尝试在点击的部分展开和折叠行?
  • 如果这是你想要的,你可以删除整个部分developer.apple.com/documentation/uikit/uitableview/…

标签: ios swift


【解决方案1】:

更新您的代码以删除所有行,如下所示:

self.catergoryTableView.beginUpdates()
self.catergoryTableView.deleteRows(at: paths, with: .fade)
self.catergoryTableView.endUpdates()
self.arrayOfCategories?.removeAll()

只需将第一行代码添加到最后一行即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    相关资源
    最近更新 更多