iOS-XLFrom动态获设置Cell行高

之前一直在写XLFrom表单提交,行高一直是固定的,后来有个需求需要动态变换行高,自己也是脑抽了用了XLFrom来写,到这个界面快写完了,需求里面动态获取行高也是醉了。

XLFrom里面的行高设置是一个非实例方法

之前一直是固定的,所以在网上也没有找到解决方法。

+(CGFloat)formDescriptorCellHeightForRowDescriptor:(XLFormRowDescriptor *)rowDescriptor{
  //返回的高度
    return 50.0;
}

自己研究了一下
在初始化表单的时候创建一个通知

- (instancetype)init
{
  self = [super init];
  if (self) {
      [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(setFormCellHeight:) name:setFromCellHeightNSNotification object:nil];
      [self initializeForm];
  }
  return self;
}

然后在给section的时候,把数据传过去
这里其实我是动态创建了list长度的section
每个cell高度都是不同的。

   NSArray *list = @[
  @[@"14栋101",@"14栋102",@"14栋103",@"14栋104"],
  @[@"15栋101",@"15栋102",@"15栋103",@"15栋104",@"15栋105",@"15栋106",@"15栋106",@"15栋106",@"15栋106"],
  @[@"16栋101",@"16栋102",@"16栋103",@"16栋104",@"16栋105",@"16栋106"]];
    NSArray *tag = @[@"list1",@"list2",@"list3"];
    NSArray *title = @[@"一楼",@"二楼",@"三楼"];
    for (int i = 0; i

然后实现通知
直接找到需要改变的cell的tag给他赋值传过来的高度

-(void)setFormCellHeight:(NSNotification *)notification{
    NSDictionary*dic = notification.object;
    XLFormRowDescriptor *row = [self.form formRowWithTag:dic[@"data"]];
    row.height = [dic[@"height"] floatValue];
}
注意

主要就是在自定义cell里面的问题了。
继承XLFrom的BaseCell
里面有个configure配置cell里的界面

-(void)configure{
    [super configure];
//这个地方就是需要搭建的界面的代码
    [self setBackgroundView];
}

然后在BaseCell里面有个update给定义的视图做赋值操作

-(void)update{
    [super update];
//先赋值 然后获取到整体界面的高度
//获取到之后取到高度 
//然后取到当前Cell的tag   self.rowDescriptor.tag
    NSString *height = [NSString stringWithFormat:@"%lf",_cellHeight+40];
    NSDictionary *notificationData = @{@"data":self.rowDescriptor.tag,@"height":height};
//最后通知过去就可以了
    [[NSNotificationCenter defaultCenter]postNotificationName:setFromCellHeightNSNotification object:notificationData];
}

最后XLFrom一些简单的用法我之前的文章里面有写到过,可以去看看

你可能感兴趣的:(iOS-XLFrom动态获设置Cell行高)