DJTableViewVM
是什么
DJTableViewVM是一个轻量级的MVVM解决方案,用于使用UITableView完成您的页面。
功能
- 使用UITableView实现页面时,代码更少且更灵活;
- 易于控制单元格行;
- 支持iOS 10及以下版本的预取;
- 动态计算单元格高度;
- 预计算单元格高度;
- 键盘显示和隐藏时自动滚动;
- tableViewVM显示;
需求
- Xcode 9或更高版本
- Apple LLVM编译器
- iOS 8.0或更高版本
- ARC
演示
在 Xcode 中构建并运行 DJComponentTableViewVM.xcodeproj
。
安装
CocoaPods
编辑您的 Podfile 并添加 DJTableViewVM
pod 'DJTableViewVM'
Carthage
编辑您的 Cartfile 并添加 DJTableViewVM
github "Dokay/DJTableViewVM"
快速入门
- 示例代码
- (void)testTextRowAutoLayoutWithNib
{
DJTableViewRegister(self.aDJTableViewVM, DJTableViewVMTextTestRow, DJTableViewVMTextTestCell);
[self.aDJTableViewVM removeAllSections];
for (int j = 0; j < 20; j++) {
DJTableViewVMSection *section = [DJTableViewVMSection sectionWithHeaderTitle:@"AutoLayoutWithNib"];
[self.aDJTableViewVM addSection:section];
for (int i = 0; i < 100; i ++) {
DJTableViewVMTextTestRow *row = [DJTableViewVMTextTestRow new];
row.contentText = @"This is a test content";
__weak ViewController *weakSelf = self;
[row setSelectionHandler:^(DJTableViewVMRow *rowVM) {
[rowVM deselectRowAnimated:YES];
[weakSelf testTable];
}];
[section addRow:row];
}
}
[self.aDJTableViewVM reloadData];
}
- 设置默认样式
[DJTableViewVMRow defaultStyleInstance].titleFont = [UIFont systemFontOfSize:18];
关键类
-
DJTableViewVM:UITableView 的 ViewModel。它实现了 UITableViewDelegate & UITableViewDataSource,并有多个 DJTableViewVMSection 部分。
-
DJTableViewVMSection:DJTableViewVM 中部分的 ViewModel,每个部分包含多个 DJTableViewVMRow 行。
-
DJTableViewVMRow:部分中的行的 ViewModel,它具有与单元格相关联的属性。
-
DJTableViewVMCell:DJTableViewVMRow(ViewModel)的单元格(View),它定义了出现在 UITableViewDataSource 中的属性和行为。
-
DJTableViewVMCellProtocol:与 DJTableViewVMRow 相关的单元格协议,DJTableViewVMCell 实现了该协议,如果您不想或无法继承 DJTableViewVMCell,只需实现该协议。
-
DJInputRow协议:所有输入单元(如包含UITextField/UITextView/UIDataPicker的单元)实现的协议。DJTableViewVMTextFieldRow和DJTableViewVMTextViewRow实现了它。您可以在单元中为您的输入视图实现它。
-
DJPicker协议:所有选择单元(如包含UIDatePicker/UIPickerView的单元)实现的协议。DJNormalPickerDelegate和DJRelatedPickerDelegate实现了它。您可以在单元中的选择视图中实现它。
-
关于您项目中的现有单元:
1. 如果您的单元的父类是UITableViewCell,只需将其更改为DJTableViewVMCell。
2. 如果您的单元的父类是您的自定义类,您需要实现协议DJTableViewVMCellDelegate或将它更改为DJTableViewVMCell。
DJCollectionViewVM
UICollectionView的ViewModel:DJCollectionViewVM
联系
Dokay Dou
许可证
DJTableViewVM在MIT许可证下可用。