首页
/ iOS Swift 可折叠表格部分项目教程

iOS Swift 可折叠表格部分项目教程

2026-01-15 16:36:00作者:毕习沙Eudora

1. 项目介绍

ios-swift-collapsible-table-section 是一个简单的 iOS Swift 项目,展示了如何在不使用 Main Storyboard、XIB 或注册 NIB 的情况下,通过纯 Swift 代码实现可折叠的表格部分。该项目的主要特点包括:

  • 纯 Swift 实现:所有代码均使用 Swift 编写,无需依赖 Storyboard 或 XIB。
  • 自动调整行高:表格视图会自动调整行高以适应每个单元格的内容。
  • 自定义单元格:自定义单元格也是通过纯代码实现的。

2. 项目快速启动

2.1 克隆项目

首先,克隆项目到本地:

git clone https://github.com/jeantimex/ios-swift-collapsible-table-section.git

2.2 打开项目

使用 Xcode 打开项目:

cd ios-swift-collapsible-table-section
open ios-swift-collapsible-table-section.xcodeproj

2.3 运行项目

在 Xcode 中,选择合适的模拟器或设备,然后点击运行按钮(或按 Cmd + R)来运行项目。

2.4 核心代码

以下是项目中实现可折叠表格部分的核心代码片段:

2.4.1 数据准备

struct Section {
    var name: String
    var items: [String]
    var collapsed: Bool
    
    init(name: String, items: [String], collapsed: Bool = false) {
        self.name = name
        self.items = items
        self.collapsed = collapsed
    }
}

var sections = [Section]()
sections = [
    Section(name: "Mac", items: ["MacBook", "MacBook Air"]),
    Section(name: "iPad", items: ["iPad Pro", "iPad Air 2"]),
    Section(name: "iPhone", items: ["iPhone 7", "iPhone 6"])
]

2.4.2 设置表格视图

override func viewDidLoad() {
    super.viewDidLoad()
    // 自动调整行高
    tableView.estimatedRowHeight = 44.0
    tableView.rowHeight = UITableViewAutomaticDimension
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

2.4.3 自定义表格头

class CollapsibleTableViewHeader: UITableViewHeaderFooterView {
    let titleLabel = UILabel()
    let arrowLabel = UILabel()
    
    override init(reuseIdentifier: String?) {
        super.init(reuseIdentifier: reuseIdentifier)
        contentView.addSubview(titleLabel)
        contentView.addSubview(arrowLabel)
        
        // 设置自动布局
        setupConstraints()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func setupConstraints() {
        // 设置 titleLabel 和 arrowLabel 的约束
        // ...
    }
}

2.4.4 表格数据源和代理

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

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return sections[section].collapsed ? 0 : sections[section].items.count
}

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "header") as! CollapsibleTableViewHeader
    header.titleLabel.text = sections[section].name
    header.arrowLabel.text = ">"
    header.setCollapsed(sections[section].collapsed)
    header.section = section
    header.delegate = self
    return header
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
    cell.textLabel?.text = sections[indexPath.section].items[indexPath.row]
    return cell
}

3. 应用案例和最佳实践

3.1 应用案例

  • 产品列表:在电商应用中,可以使用可折叠表格部分来展示不同类别的产品列表。
  • FAQ 页面:在 FAQ 页面中,可以使用可折叠表格部分来展示问题和答案。

3.2 最佳实践

  • 性能优化:在处理大量数据时,确保只在展开的表格部分渲染单元格,以提高性能。
  • 自定义样式:根据应用的设计需求,自定义表格头和单元格的样式。

4. 典型生态项目

  • RxSwift:结合 RxSwift 可以更方便地处理表格视图的数据绑定和事件响应。
  • SnapKit:使用 SnapKit 可以简化自动布局的代码,使布局更加简洁易读。
  • Alamofire:在实际应用中,可以使用 Alamofire 进行网络请求,动态加载表格数据。
登录后查看全文
热门项目推荐
相关项目推荐