Boom 1.1.0

Boom 1.1.0

Meniny维护。



Boom 1.1.0

遇见Boom

Boom

Author EMail MIT
Version Platforms Swift
Build Passing Cocoapods Carthage SPM

🏵简介

Boom是一个使用高效、声明性和类型安全方法管理的UITableView和UICollectionView。

📋要求

类型 要求

平台

iOS

9.0+

macOS

不适用

tvOS

不适用

watchOS

不适用

Linux

不适用

IDE

Xcode

10.2+

语言

Swift

5+

📲安装

CocoaPods

Boom可在CocoaPods上找到。

use_frameworks!
pod 'Boom'

手动

Boom目录中的所有文件复制到您的项目中。

🛌依赖项

不适用

❤️贡献

欢迎您分叉并提交拉取请求。

🔖许可

Boom是开源软件,许可协议为MIT

🔫使用方法

准备模型

例如

import Boom

// Confirm to BoomModel protocol
struct CellData: Equatable, Hashable, BoomModel {
    var identifier: Int {
        return id.hashValue
    }

    let id: String = NSUUID().uuidString

    var avatar: UIImage
    var title: String
    var detail: String?

    init(avatar: UIImage, title: String, detail: String?) {
        self.avatar = avatar
        self.title = title
        self.detail = detail
    }
}

准备单元格

例如

import Boom

class ConversationTableViewCell: UITableViewCell {

    @IBOutlet weak var titleLbale: UILabel!
    @IBOutlet weak var avatarImageView: UIImageView!
    @IBOutlet weak var subtitleLabel: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()

        titleLbale.font = UIFont.boldSystemFont(ofSize: 20)
        titleLbale.textColor = UIColor.darkText

        subtitleLabel.font = UIFont.systemFont(ofSize: 15)
        subtitleLabel.textColor = UIColor.lightGray
    }

}

// Confirm to BoomCell protocol
extension ConversationTableViewCell {
    static var reuseIdentifier: String {
        return "ConversationTableViewCell"
    }

    static var registerAsClass: Bool {
        return false
    }
}

生成适配器

let adapter = TableAdapter<CellData, ConversationTableViewCell>()
adapter.on.dequeue = { ctx in
    ctx.cell?.avatarImageView.image = ctx.model.avatar
    ctx.cell?.titleLbale?.text = ctx.model.title
    ctx.cell?.subtitleLabel?.text = ctx.model.detail
}
adapter.on.tap = { ctx in
    print("Tapped on \(ctx.model.identifier)")
    return .deselectAnimated
}
tableView.manager.register(adapter: adapter)

生成章节

let dataSet: [CellData] = [...]

// optional: Header
let header = TableSectionView<TableExampleHeaderView>()
header.on.height = { _ in
    return 50
}

// optional: Footer
let footer = TableSectionView<TableFooterExample>()
footer.on.height = { _ in
    return 30
}
footer.on.dequeue = { ctx in
    ctx.view?.titleLabel?.text = "\(dataSet.count) Data"
}

// generate
let section = TableSection(headerView: header, footerView: footer, models: dataSet)

// add to manager
tableView.manager.add(section: section)

设置行高

tableView.manager.rowHeight = .autoLayout(estimated: 100)

重新加载

tableView.manager.reloadData(after: { _ in
    return TableReloadAnimations.default()
}, onEnd: nil)