typora-copy-images-to | typora-root-url |
---|---|
../SwiftTableViewGroup/images/ |
../SwiftTableViewGroup |
SwiftTableViewGroup
❇️ `SwiftTableViewGroup`使用最新 Swift5.1 语法 `_functionBuilder` 和最新 `SwiftUI` 设计模式进行开发。
❇️ `SwiftTableViewGroup`利用最新 `Swift.1` 语法 `_functionBuilder` 符合 `SwiftUI` 设计的数据驱动。
[TOC]
Changelog(更新记录)
v2.0.0
- 支持
UICollectionView
数据驱动 - API 更改更容易使用
- 支持自定义高度或大小
- 更安全地使用
示例
安装
Swift包管理器(Xcode 11)
https://github.com/josercc/SwiftTableViewGroup
Claim(要求)
Xcode11
Swift5.1
如何使用(怎么使用)
UITableView
伪代码(Fake code)
let tableView = UITableView()
var dataSource = TableView(tableView:tableView)
/// setup configuration(初始化配置)
dataSource.setup {
/// Add Header
TableViewHeaderFooterView
/// Add Cell
TableViewCell
/// Add More Cell
...
/// Add Footer
TableViewHeaderFooterView
}
/// Perform registration and refresh(执行注册和刷新)
dataSource.reloadData
创建一个静态文本列表(创建一个简单的列表)
TableCell { content, contentCell in
/// Create a configured block(创建配置的 Block)
content.configuration(UITableViewCell.self) { (cell, index) in
cell.textLabel?.text = self.source[index]
cell.accessoryType = .disclosureIndicator
}
/// Create a clickback call block(创建点击回调 Block)
content.didSelectRow(UITableViewCell.self) { (cell, index) in
}
}
.number(self.source.count)
.height(45)
}
self.dataSource.reloadData()
创建复杂的TableView(创建复杂的表格)
let settingDataSource = TableView(tableView: tableView)
settingDataSource.setup {
/// Create `SettingHeaderView` Header(创建自定义`SettingHeaderView`Header)
TableHeaderView(SettingHeaderView.self, { content,contentHeader in
content.configuration(SettingHeaderView.self) { (view, section) in
view.textLabel?.text = "Header"
}
})
.height(49)
/// Create `IntrinsicContentTextLabelCell` Cell(创建`IntrinsicContentTextLabelCell`Cell)
TableCell(IntrinsicContentTextLabelCell.self)
/// Create Dynamic change number Cell(创建动态更改数量的 Cell)
TableCell { content,contentCell in
content.configuration(UITableViewCell.self) { (cell, index) in
cell.textLabel?.text = "\(index) 点击我会增加哦"
}
content.didSelectRow(UITableViewCell.self) { (cell, index) in
let number = contentCell.number + 1;
contentCell.number(number)
settingDataSource.reloadData()
}
}
.height(44)
/// Create Dynamic change height Cell)(创建动态更改高度的 Cell)
TableCell { content,contentCell in
content.configuration(UITableViewCell.self) { (cell, index) in
cell.textLabel?.text = "点击我改变高度"
}
content.didSelectRow(UITableViewCell.self) { (cell, index) in
let height = contentCell.height == 44 ? 100 : 44;
contentCell.height(CGFloat(height))
settingDataSource.reloadData()
}
}
.height(44)
}
动态更改数量
动态修改高度
UICollectionView
self.dataSource.setup {
/// Create normal class `UICollectionViewCell` cell(创建默认为`UITableViewCell`类的 Cell)
CollectionCell { content, cellContent in
content.configuration(UICollectionViewCell.self) { (cell, index) in
cell.backgroundColor = index % 2 == 0 ? UIColor.red : UIColor.blue
}
content.didSelectRow(UICollectionViewCell.self) { (cell, index) in
cell.backgroundColor = cell.backgroundColor == UIColor.red ? UIColor.blue : UIColor.red
}
}
.number(20)
.size(CGSize(width: 100, height: 200))
}
.inset(UIEdgeInsets(top: 20, left: 10, bottom: 20, right: 10))
self.dataSource.reloadData()
问题
❓ 如何动态地插入或删除某些元素
您可以更改TableView的Sections数组的另一侧的元素属性,然后调用
reloadData
。
❓ 如何监听UIScrollView
的其他代理方法
public struct ScrollViewDelegate {
public var scrollViewDidScroll:((_ scrollView: UIScrollView) -> Void)?
public var scrollViewWillBeginDragging:((_ scrollView: UIScrollView) -> Void)?
public var scrollViewWillEndDragging:((_ scrollView: UIScrollView, _ velocity: CGPoint, _ targetContentOffset: UnsafeMutablePointer<CGPoint>) -> Void)?
public var scrollViewDidEndDragging:((_ scrollView: UIScrollView, _ decelerate: Bool) -> Void)?
public var scrollViewWillBeginDecelerating:((_ scrollView: UIScrollView) -> Void)?
public var scrollViewDidEndDecelerating:((_ scrollView: UIScrollView) -> Void)?
}
可以实现上述
UITableView
的代理方法
示例
tableView.scrollDelegate?.scrollViewDidScroll = { scrollView in
}
我觉得支持的功能太少了。
可以提交PR或提ISSUSE
API 文档
- 高度或尺寸设置优先级
- 高度(UITableViewCell/UITableHeaderFooterView)
- 自定义 > 设置 > 自动获取(sizeToFit)
- 大小(UICollectionViewCell/UICollectionReusableView)
- 自定义 > 设置 > FlowLayout
- 高度(UITableViewCell/UITableHeaderFooterView)
联系我
- 电子邮件: [email protected]