快速UITableView与扩展部分,强制关闭已经打开的部分在新的部分选定



晚上好

我有一个UITableView与展开部分。它的作品很棒,但是,如果我有一个部分展开,我选择一个新的部分,这两个部分将展开。我正在尝试强制关闭已打开的部分,因此一次只能打开一个部分。

var currentlyOpenedSection = -1    

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: true)
    if indexPath.row == 0{
        if currentlyOpenSection != indexPath.section && currentlyOpenSection != -1{
            // FORCE CLOSE currentlyOpenedSection
            Section_List[currentlyOpenSection].isOpened = false // Bool that tracks if this cell is open or not, read by "numberOfRowsInSection" function
        }
        Section_List[indexPath.section].isOpened = !Section_List[indexPath.section].isOpened // This flip flops the bool that tracks if this section is open, again read by the function "numberOfRowsInSection" to determine how many cells to dedicate to this section
        if Section_List[indexPath.section].isOpened {
            currentlyOpenSection = indexPath.section // store the new value
        } else {
            currentlyOpenSection = -1 // or reset the value to show that none are currently open
        }
    }
    tableView.reloadSections([indexPath.section], with: .none)
}

这是我得到的错误消息:"无效更新:无效的行数在第0节。更新后(1)的现有部分所包含的行数必须等于更新前(4)的部分所包含的行数,加上或减去从该部分插入或删除的行数(0插入,0删除),加上或减去从该部分移进或移出的行数(0移进,0移出)。

这个错误信息是完全有意义的,因为我只是隐藏单元格在部分,不添加或删除单元格,但我不知道如何克服它。

我在几年前发现了这个关于堆栈溢出的问题,但唯一的答案只是告诉我这是可能的,而不一定是如何实际做到的。一次展开和收缩一行UITableView swift

任何想法吗?谢谢你的宝贵时间。

在输入我的问题后,我有了一个想法,并决定尝试一下,它奏效了。既然我已经把问题打出来了,我想我应该把答案贴在这里。

我所要做的就是在声明该section为closed (set isOpened = false)后重新加载它。下面的新代码,空格表示强调:

var currentlyOpenedSection = -1    
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
        if indexPath.row == 0{
            if currentlyOpenSection != indexPath.section && currentlyOpenSection != -1{
                // FORCE CLOSE currentlyOpenedSection
                Section_List[currentlyOpenSection].isOpened = false // Bool that tracks if this cell is open or not


            tableView.reloadSections([currentlyOpenedSection], with: .none)


            }
            Section_List[indexPath.section].isOpened = !Section_List[indexPath.section].isOpened
            if Section_List[indexPath.section].isOpened {
                currentlyOpenSection = indexPath.section
            } else {
                currentlyOpenSection = -1
            }
        }
        tableView.reloadSections([indexPath.section], with: .none)
   }

相关内容

  • 没有找到相关文章

最新更新