XLForm的简单使用

2017-10-27  本文已影响233人  碧海云天V

前言

XLForm可以快速制作每一行风格都不一样的tableView,其自带的cell风格能满足大部分需求,同时也可以自定义cell。在使用XLForm时,需要通过cocoaPods导入。

1、创建XLForm

XLFormDescriptor * form; //建立表单,等同于创建uitableview  
XLFormSectionDescriptor * section;//建立组  section  
XLFormRowDescriptor * row;//建立行相当于cell  

form = [XLFormDescriptor formDescriptor];//创建表单
self.form = form;

//--- 第一组 ---
section = [XLFormSectionDescriptor formSectionWithTitle:@""];  //创建区
[form addFormSection:section];
//第一行
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"date" rowType:XLFormRowDescriptorTypeDate title:@"Date"];//创建行
row.action.viewControllerClass = [MyViewController class];//cell的点击实现页面跳转
row.action.formSelector = @selector(touchEvent:);//指定cell点击时执行方法;
row.required = YES;   //设置是否为必填项
row.height = 50; //可以手动设置行高
row.value = @"50%";  //设置要显示的值
[section addFormRow:row];
//--- 第二组 ---
section = [XLFormSectionDescriptor formSectionWithTitle:@""];  //创建区
[form addFormSection:section];
//第二行
[XLFormRowDescriptor formRowDescriptorWithTag:@"is_billable" rowType:XLFormRowDescriptorTypeBooleanSwitch title:@"Billable"]; //创建行
[section addFormRow:row];
//可以直接调用self.tableView
例1
self.tableView.frame = CGRectMake(0, 0, ScreenWidth, ScreenHeight-80);
例2
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return 80;
}

2、监听值的变化

监听值的变化有两种方法
1.通过block回调

//block赋值
self.rowDescriptor.onChangeBlock(oldValue, newValue, rowDescriptor);
//block接收
row.onChangeBlock = ^(id  _Nullable oldValue, id  _Nullable newValue, XLFormRowDescriptor * _Nonnull rowDescriptor) {
      NSLog(@"%@", newValue);
};

2.通过 - (void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)formRow oldValue:(id)oldValue newValue:(id)newValue方法接收

- (void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)formRow oldValue:(id)oldValue newValue:(id)newValue{
      NSLog(@"%@", newValue);
}

3、自定义cell

// 内部直接赋值  
NSString * const XLFormRowDescriporTypeFloat = @"XLFormRowDescriporTypeFloat";  
@interface MKJFloatTextFieldCell () <UITextFieldDelegate>  
@end  
@implementation MKJFloatTextFieldCell  
// 在主表单中注册对应的cell以及对应的ID  
+(void)load  
{  
    [XLFormViewController.cellClassesForRowDescriptorTypes setObject:NSStringFromClass([MKJFloatTextFieldCell class]) forKey:XLFormRowDescriporTypeFloat];  
}  
// 这个方法是用来设置属性的 必须重写  类似于初始化的属性不变的属性进行预先配置  
- (void)configure  
{  
    [super configure];  

    self.selectionStyle = UITableViewCellSelectionStyleNone;  
    self.leftLabel.layer.borderColor = [UIColor yellowColor].CGColor;  
    self.leftLabel.layer.borderWidth = 1.0f;  
    self.textField.delegate = self;  
    self.textField.font = [UIFont boldSystemFontOfSize:16];  
}  
// 这个方法是用来进行更新的,外面给唯一的字段Value设定值就好了 通过self.rowDescriptor.value的值变化来进行更新  
- (void)update  
{  
    [super update];  
    NSDictionary *value = self.rowDescriptor.value;  
    self.leftLabel.text = [value objectForKey:@"left"];  
    self.textField.text = [value objectForKey:@"right"];  
  
    //接收设置的值,并进行相应的操作
    NSString *str = self.rowDescriptor.cellConfigForSelector[@"key"];
    NSLog(@"%@", str);
}
上一篇下一篇

猜你喜欢

热点阅读