MTZTableViewManager 1.2.0

MTZTableViewManager 1.2.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2017年10月

Mauricio Tremea Zaquia维护。



  • Mauricio Tremea Zaquia

MTZTableViewManager 是一个强大的框架,允许您以描述性的方式创建表格视图,通过指定行和部分,无需担心索引。它还提供了一组用于创建表单和处理其输入、应用掩码、执行验证以及将复杂对象转换为其他对象和从其他对象转换为复杂对象的工具。

MTZTableViewManager

安装

手动

  • 请确保选择正确的标签(目前是 1.1.3)。
  • MTZTableViewManager.xcodeproj 文件拖放到您的 Xcode 项目中。
  • 请确保您的子模块是最新的。
  • MTZTableViewManager.framework(位于 Products 下)拖放到您的目标 Linked Frameworks and Libraries 区域。

示例用法

行、部分和数据

开始相当简单。只需在某个地方声明一个自己的 MTZTableManager

@property (nonatomic) MTZTableManager *tableManager;

然后声明您的行、部分以及最终的数据。建议使用自定义的 UITableViewCell 子类。

MTZTableRow *row = [[MTZTableRow alloc] initWithClazz:[MyCustomCell class] action:^(NSIndexPath * _Nonnull indexPath, id<MTZModel> model) {
        NSLog(@"Tap!");
    }];
MTZTableSection *section = [[MTZTableSection alloc] initWithTableRows:@[row]];
MTZTableData *data = [[MTZTableData alloc] initWithTableSections:@[section]];
self.tableManager = [[MTZTableManager alloc] initWithTableView:self.tableView tableData:data];

然后您就可以开始了!请注意,当使用 MTZTableManager 时,您不能成为 tableView 的代理或数据源。

  • 您还可以为行提供一个常规和/或展开的高度,并在选择时在它们之间切换。
  • 您还可以动态地隐藏行或部分,只需设置 hidden 属性。
  • 您还可以使用 nib 快速创建单元格。同样,您可以为每个部分提供自定义的头部和尾部类。

模型

要将对象声明为可能的模型,只需使其符合 MTZModel

@interface MyCustomCellModel: NSObject<MTZModel>
@property (nonatomic) NSString *text;
@end

单元格可以配置为显示信息。只需将您想要的单元格符合 MTZModelDisplaying 并实现所需的方法。

@interface MyCustomCell: UITableViewCell <MTZModelDisplaying>
@end

@implementation MyCustomCell
- (void)configureWithModel:(id<MTZModel>)model {
    self.textLabel.text = ((MyCustomCellModel *)model).text;
}
@end
  • 部分也可以有模型,只要它们的类也符合 MTZModelDisplaying,并且会被提供给自定义的头部/尾部(如果有的话)。

表单

表单对象

表单对象是可以由 MTZTableViewManager 生成的表单操作的对象。理想情况下,您想使其所有属性都不可写,以避免外部修改,因为表单元素将通过 KVO 直接修改值。如果您正在使用 Swift,别忘了加上 dynamic 关键字!确保对象符合 MTZFormObject

@interface MyCustomFormObject: NSObject <MTZFormObject>
@property (nonatomic, readonly) NSString *title;
@property (nonatomic, readonly) NSDate *date;
@property (nonatomic, readonly) MyCustomUser *user;
@end

表单行

为了使单元格与表单兼容,它需要符合 MTZFormEditing 并实现所需的方法。

@interface MyCustomTextFieldCell: UITableViewCell <MTZFormEditing>
@property (nonatomic) UITextField *textField;
@end

@implementation MyCustomTextFieldCell
// ...
- (UIControl<MTZFormField> *)fieldForFormObject {
    return self.textField;
}
@end
  • 注意表单字段必须符合 MTZFormField。框架已经为 UITextFieldUITextViewUISwitchUIStepper 提供了默认实现。

表单字段输入配件视图

表单字段可以自动为您提供 inputAccessoryView,以在同一个部分内的其他字段之间进行跳转。要本地化框架提供的输入辅助视图中的按钮,只需在您的  Localizable.strings 中添加以下条目,并根据您的需求替换翻译

"mtz_prev" = "Prev";
"mtz_next" = "Next";
"mtz_done" = "Done";
  • 如果键盘提供退格按钮,则省略“完成”按钮。

表单日期行

日期是一个特殊的话题。因此,如果您想要与 NSDate 键路径交互,请使用 MTZTableFormDateRow

MTZTableFormDateRow *dateRow = [[MTZTableFormDateRow alloc] initWithClazz:[MyCustomTextFieldCell class] formObject:self.formObject keyPath:CLASSKEY(MyCustomFormObject, date)];
dateRow.minimumDate = [NSDate date];
dateRow.maximumDate = [[NSDate date] dateByAddingTimeInterval:60*60*24*15];
dateRow.datePickerMode = MTZDatePickerModeDateAndTime;
  • MTZTableFormDateRow 必须也将 UITextField 作为表单字段使用,因为我们用合适的选择器替换了 inputView
  • 您还可以使用 MTZDatePickerModeExpirationDate 作为选择器模式,并且它将使用 MTZExpirationDatePicker 作为 inputView

表单选项

如果您想要提供一组选项,请将您想要提供的对象类型 conforms 为 MTZFormOption

@interface MyCustomUser: NSObject <MTZFormOption>
@property (nonatomic) NSInteger ID;
@property (nonatomic) NSString *email;
- (instancetype)initWithID:(NSInteger)ID email:(NSString *)email;
@end

@implementation MyCustomUser
// ...
- (NSString *)optionDescription {
return self.email;
}
@end

然后,设置 MTZTableFormRow 上的 availableOptions 属性

NSArray *allUsers = @[[[MyCustomUser alloc] initWithID:1 email:@"[email protected]"],
                          [[MyCustomUser alloc] initWithID:2 email:@"[email protected]"],
                          [[MyCustomUser alloc] initWithID:3 email:@"[email protected]"]];
MTZTableFormRow *userRow = [[MTZTableFormRow alloc] initWithClazz:[MyCustomTextFieldCell class] formObject:self.formObject keyPath:CLASSKEY(MyCustomFormObject, user)];
userRow.availableOptions = allUsers;
  • 如果您设置了可用选项,您也必须使用 UITextField 作为表单字段,因为我们用合适的选择器替换了 inputView

转换器

TBA

验证器

TBA

掩码

TBA

命令

TBA

许可证

MTZTableViewManager 在 MIT 许可下发布。有关详细信息,请参阅 LICENSE。