需要使用扩展/折叠功能按字母顺序对UITableView进行分组

时间:2017-05-16 10:05:54

标签: ios swift uitableview

我需要实现一个UITableView,其字母顺序与Contact App相同,然后选择要扩展的任何单元格。下面是我的字母顺序代码。

    var houseHoldArray = ["Ahouse", "AAhouse", "Bhouse", "BBhouse", "BBBhouse", "CHouse", "CCHouse", "CCHouse", "DHouse", "EHouse", "HHouse", "XHouse", "ZHouse"]
    var houseHoldAlphabet = ["A", "B", "C", "D", "E", "H", "X", "Z"]
    var houseHoldArrayOfDic = [
                                "A": ["Ahouse", "AAhouse"],
                                "B": ["Bhouse", "BBhouse", "BBBhouse"],
                                "C": ["CHouse", "CCHouse", "CCHouse"],
                                "D": ["DHouse"],
                                "E": ["EHouse"],
                                "H": ["HHouse"],
                                "X": ["XHouse"],
                                "Z": ["ZHouse"]
                              ]



public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return houseHoldArrayOfDic[houseHoldAlphabet[section]]!.count
}

public func numberOfSections(in tableView: UITableView) -> Int {
    return houseHoldAlphabet.count
}

public func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return houseHoldAlphabet[section]
}

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    var cell = tableView.dequeueReusableCell(withIdentifier: "cell")
    if cell == nil {
         cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell")
    }

    cell?.textLabel?.text = houseHoldArrayOfDic[houseHoldAlphabet[indexPath.section]]?[indexPath.row]
            // Configure the cell...

    return cell!
}

func sectionIndexTitles(for tableView: UITableView) -> [String]? {
    return houseHoldAlphabet
}

func tableView(_ tableView: UITableView, sectionForSectionIndexTitle title: String, at index: Int) -> Int {
    return houseHoldAlphabet.index(of: title)!
}

现在假设我选择Ahouse然后它应该展开并显示subCells。每行应该是可扩展的。

我知道在UITableView上应用展开和折叠的两种方法

  1. 使用TapGesture: - 在部分添加tapGesture - >在该部分插入行 - >重新加载选定的部分
  2. 使用didSelectRowAtIndex: - 每个部分下只有一个单元格(部分高度可以是0) - >选择此行时,编写代码以在didSelectRowAtIndex中添加新行和重新加载部分。
  3. 如果尝试重新加载部分,上述两种方法都不会给出正确的动画,因为我在每个部分都有多行(可以展开)。

    此外,上述两种方法适用于每个章节中的节或单个单元格上的tapGesture。不确定如何为节中的多行实现。

    需要建议!!

1 个答案:

答案 0 :(得分:0)

您是否使用tableView.beginUpdates()后跟tableView.endUpdates()代替tableView.reloadData尝试了选项2?这将触发高度更改,而无需重新加载整个dataSource