美文网首页
XLForm的简单使用

XLForm的简单使用

作者: 碧海云天V | 来源:发表于2017-10-27 13:50 被阅读233次

    前言

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

    1、创建XLForm

    • 建立新页面时要继承 XLFormViewController
    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];
    
    • 在新的页面中可以直接使用tableViewdelegate,此时delegate的优先级是最高的
    //可以直接调用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

    • 自定义cell时要继承XLFormBaseCell
    • 通过[row.cellConfigForSelector setValue:@"value" forKey:@"key"];设置自定义cell的值,在- (void)update { }中做判断更新。
    // 内部直接赋值  
    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);
    }
    

    相关文章

      网友评论

          本文标题:XLForm的简单使用

          本文链接:https://www.haomeiwen.com/subject/bwjjcxtx.html