遇见Boom
🏵 简介
Boom是一个使用高效、声明性和类型安全方法管理的UITableView和UICollectionView。
📋 要求
类型 | 要求 | |
---|---|---|
平台 |
iOS |
9.0+ |
macOS |
不适用 |
|
tvOS |
不适用 |
|
watchOS |
不适用 |
|
Linux |
不适用 |
|
IDE |
Xcode |
10.2+ |
语言 |
Swift |
5+ |
📲 安装
手动
将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)