删除 UITableView 部分的最后一行而不删除部分?

Posted

技术标签:

【中文标题】删除 UITableView 部分的最后一行而不删除部分?【英文标题】:Delete last row in section of UITableView without deleting section? 【发布时间】:2015-07-28 17:00:43 【问题描述】:

有什么方法可以在不删除整个部分的情况下删除 UITableView 中特定部分的最后一行?我希望能够从一个部分中删除最后一行,但保持该部分的标题可见,因为它表明这些部分存在但没有数据。

我在 *** 上找到了多个先前的答案,但他们的解决方案似乎都是如果要删除部分的最后一行,则必须删除该部分,例如,How to delete the last row of a section?

【问题讨论】:

【参考方案1】:

嗯,您的问题与 UITableViewDataSource 协议的工作原理有关,如果该部分中没有任何内容,则不应显示该部分。

但是你能做些什么呢?

有一个简单的方法,在你的 dataSource numberOfRowsInSection 中你可以做一个 if,那个条件将验证你的 dataSource 计数是否等于 0 并返回 1,像这样:

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        var numberOfRows = 0
        switch section
        case 0:
            numberOfRows = firstSectionArray.count()
        case 1:
            numberOfRows = secondSectionArray.count()

        default:
            ()
        

        if numberOfRows == 0 
            numberOfRows = 1
        
        return numberOfRows
    

在cellForRowAtIndexPath中:

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
         var numberOfRowsForThisSection = 0
         switch indexPath.section
         case 0:
             numberOfRowsForThisSection = firstSectionArray.count()
         case 1:
             numberOfRowsForThisSection = secondSectionArray.count()

         default:
             ()
         
         if numberOfRowsForThisSection == 0 
             return tableView.dequeueReusableCellWithIdentifier("blankCell") as! UITableViewCell
         

//        Do the default implementation
//        .
//        .
//        .

    

“哦,不过现在tableView中间多了一个白色的单元格”

好的,让我们打破它:

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
        var numberOfRowsForThisSection = 0
        switch indexPath.section
        case 0:
            numberOfRowsForThisSection = firstSectionArray.count()
        case 1:
            numberOfRowsForThisSection = secondSectionArray.count()

        default:
            ()
        
        if numberOfRowsForThisSection == 0 
            return 0.0
        
    

【讨论】:

【参考方案2】:

...事实证明我的错误在其他地方。在这种情况下,我不小心尝试删除索引路径 (1, 2147483647)。之所以出现此错误,是因为我假设我用于该部分数据的数组包含我要删除的对象。因为它没有,[array indexOfObject:object] 等于 2147483647。奇怪的是,产生的错误是Invalid number of sections 而不是Invalid number of rows in section

【讨论】:

以上是关于删除 UITableView 部分的最后一行而不删除部分?的主要内容,如果未能解决你的问题,请参考以下文章

从部分移动最后一行时如何删除部分标题

从 tableview 部分删除最后一行时,iOS 应用程序崩溃

从 UITableView 中删除最后一行 - 因 NSInternalInconsistencyError 而崩溃

选择部分中的最后一行后显示分隔线

删除 UITableView 的最后一部分会导致异常

删除 Table View() 最后一行下方的灰色带而不拉伸单元格?