Flix 是一个灵活的 iOS 框架,适用于使用 UITableView
或 UICollectionView
创建动态表单。
特性
- 需要时,支持不重复使用。
- 需要时,支持列表的重复使用。
- 支持嵌套表单。
- 支持添加、删除和插入。
- 支持 Storyboard 设计。
- 提供示例应用!
- 与
UITableView
和UICollectionView
一起工作。
Flix 主要关注将 UICollectionView
或 UITableView
的单元格组合起来,它不关心视图布局或业务逻辑。因此,您可以使用 Flix 容易地构建自定义表单。
预览
需求
- Xcode 10.2+
- Swift 5+
- RxSwift 5.0+
- RxDataSources 4.0+
安装
CocoaPods
pod 'Flix', '~> 4.0'
Principle
每个供应商都会生成一定数量的节点(单元格),然后根据顺序将这些供应商组合起来。
教程 - 一个简单的设置页面
在创建设置页面时,我们不希望某些单元格被重复使用,例如“个人资料单元格”、“飞行模式单元格”。这看起来像在 Storyboard 中创建静态的 tableView。
要创建一个个人资料单元格,我们只需要创建一个 UniqueCustomTableViewProvider
并配置其样式并添加一些视图。
现在,我们已经在设置页面中有了个人资料单元格,考虑到我们可能在另一个 UITableView
上使用此供应商。我们应该为 profileProvider
创建一个类。
我们可以从 UniqueCustomTableViewProvider
继承。
class ProfileProvider: UniqueCustomTableViewProvider {
let avatarImageView = UIImageView()
let nameLabel = UILabel()
let subTitleLabel = UILabel()
init(avatar: UIImage, name: String) {
super.init()
self.itemHeight = { _ in return 80 }
self.accessoryType = .disclosureIndicator
avatarImageView.image = avatar
self.contentView.addSubview(avatarImageView)
nameLabel.text = name
self.contentView.addSubview(nameLabel)
subTitleLabel.text = "Apple ID, iCloud, iTunes & App Store"
self.contentView.addSubview(subTitleLabel)
}
}
或者实现协议 UniqueAnimatableTableViewProvider
。
class ProfileProvider: UniqueAnimatableTableViewProvider {
let avatarImageView = UIImageView()
let nameLabel = UILabel()
let subTitleLabel = UILabel()
init(avatar: UIImage, name: String) {
avatarImageView.image = avatar
nameLabel.text = name
subTitleLabel.text = "Apple ID, iCloud, iTunes & App Store"
}
func onCreate(_ tableView: UITableView, cell: UITableViewCell, indexPath: IndexPath) {
cell.accessoryType = .disclosureIndicator
cell.contentView.addSubview(avatarImageView)
cell.contentView.addSubview(nameLabel)
cell.contentView.addSubview(subTitleLabel)
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath, value: ProfileProvider) -> CGFloat? {
return 80
}
}
但事实上,个人资料单元格被放置在一个部分中,我们可以使用 SectionProfiler
。
let profileSectionProvider = SpacingSectionProvider( providers: [profileProvider], headerHeight: 35, footerHeight: 0 ) self.tableView.flix.build([profileSectionProvider]) |
![]() |
---|
然后添加更多供应商。
到目前为止,我们只使用一个供应商生成一个单元格。我们也可以为单元格组创建一个供应商。
看起来不错。
实际上,Flix 支持更多的构建列表视图功能,您可以用它轻松地创建具有各种链接效果(如日历事件、GitHub 注册)的页面。更多示例可在 示例文件夹 中找到。
贡献
- 请复制此项目
- 实现新的方法或更改。
- 在 README.md 中编写合适的文档和注释。
- 提交一个 pull 请求。
联系
许可协议
Flix采用MIT许可协议发布。更多详细信息请参阅LICENSE。