无法在 Swift 中展开和折叠 TableViewCell

Posted

技术标签:

【中文标题】无法在 Swift 中展开和折叠 TableViewCell【英文标题】:Unable to Expand and Collapse TableViewCell in Swift 【发布时间】:2021-07-20 19:06:23 【问题描述】:

我已经拍了two prototype cells called CategoryTableCell and SubCategoryTableCell in tableview

最初,我需要在TableView 中显示所有CategoryTableCell 数据。在这里,如果我单击CategoryTableCell,那么我需要在SubCategoryTableCell 中显示该类别的子类别。该怎么做?

我需要隐藏所有子类别。如果我单击 CategoryTableCell 中的任何一个类别,那么我需要它的子类别。

代码:

extension CategoryVC: UITableViewDelegate, UITableViewDataSource

func numberOfSections(in tableView: UITableView) -> Int 
    return self.activeCategories?.count ?? 0 : 1


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    
    return self.activeCategories?[section].sub_categories?.count ?? 0


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    
        let cell = tableView.dequeueReusableCell(withIdentifier: "SubCategoryTableCell", for: indexPath) as! SubCategoryTableCell
        cell.selectionStyle = .none
        let activesubCat = self.activeCategories?[indexPath.section].sub_categories
        let indexData = activesubCat?[indexPath.row]
        
        cell.lblTitle?.text = langType == .en ? indexData?.details?.first?.title : indexData?.details?[1].title
        return cell


func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 
    
        let view = tableView.dequeueReusableCell(withIdentifier: "CategoryTableCell") as! CategoryTableCell
        let indexData = self.activeCategories?[section]
        view.btnDetails?.tag = section
        view.lblTitle?.text = langType == .en ? indexData?.details?.first?.title : indexData?.details?[1].title
        return view
   


func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat 
    return isFromFilter ? 40 : 0

通过代码,我得到了红色的所有类别和深灰色文本的子类别。但是,这里的细胞没有膨胀和塌陷。我最初需要显示所有红色文本。在这里,如果我点击单元格,那么它必须展开并显示所有灰色文本。怎么做?请对代码提供帮助。

o/p:用上面的代码来这样

[![截图][1]][1]

编辑

JSON 模型:

public class Category_json 
public var id : Int?
public var status : String?
public var sub_categories : Array<Sub_categories>?
var isExpanded = true

required public init?(dictionary: NSDictionary) 

    id = dictionary["id"] as? Int
    status = dictionary["status"] as? String
    if (dictionary["sub_categories"] != nil)  sub_categories = Sub_categories.modelsFromDictionaryArray(array: dictionary["sub_categories"] as? NSArray ?? NSArray()) 
    if (dictionary["details"] != nil)  details = Details.modelsFromDictionaryArray(array: dictionary["details"] as? NSArray ?? NSArray()) 


public func dictionaryRepresentation() -> NSDictionary 

    let dictionary = NSMutableDictionary()

    dictionary.setValue(self.id, forKey: "id")
    dictionary.setValue(self.status, forKey: "status")

    return dictionary
 

public var activeCategories : Array&lt;Category_json&gt;?

EDIT2:

@objc func expandMe() 
     print("expand me")

【问题讨论】:

【参考方案1】:

将属性添加到您的 activeCategories 数组的模型

var isExpanded = true

然后在numberOfRowsInSection 里面

guard let item = self.activeCategories?[section] else  return 0 
return item.isExpanded ? (item.sub_categories?.count ?? 0) : 0

然后玩isExpanded并刷新表格

编辑

内部viewForHeaderInSection

 let header = tableView.dequeueReusableCell(withIdentifier: "CategoryTableCell") as! CategoryTableCell 
 button.tag = section

然后内部行动

@objc headerClicked(_ sender:UIButton) 
    let section  = sender.tag
    guard let item = self.activeCategories?[section] else  return 0 
    item.isExpanded.toggle()
    tableView.reloadData()
 

【讨论】:

以上是关于无法在 Swift 中展开和折叠 TableViewCell的主要内容,如果未能解决你的问题,请参考以下文章

TableView 在 Swift 中展开和折叠单元格

在 ios 中展开和折叠表格视图单元格

[转]VS中展开和折叠代码

VS中展开和折叠代码,还有其他快捷操作

当我在 ios 中展开和折叠 TableList 单元格时如何更改 UILabel 文本颜色

如何仅通过单击打开和折叠同一个 JQuery 手风琴