之前一直在寫XLFrom表單提交,行高一直是固定的金麸,后來有個需求需要動態(tài)變換行高簿盅,自己也是腦抽了用了XLFrom來寫,到這個界面快寫完了棚瘟,需求里面動態(tài)獲取行高也是醉了喜最。
XLFrom里面的行高設(shè)置是一個非實例方法
之前一直是固定的,所以在網(wǎng)上也沒有找到解決方法迷雪。
+(CGFloat)formDescriptorCellHeightForRowDescriptor:(XLFormRowDescriptor *)rowDescriptor{
//返回的高度
return 50.0;
}
自己研究了一下
在初始化表單的時候創(chuàng)建一個通知
- (instancetype)init
{
self = [super init];
if (self) {
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(setFormCellHeight:) name:setFromCellHeightNSNotification object:nil];
[self initializeForm];
}
return self;
}
然后在給section的時候虫蝶,把數(shù)據(jù)傳過去
這里其實我是動態(tài)創(chuàng)建了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<list.count; i++) {
section = [XLFormSectionDescriptor formSection];
[form addFormSection:section];
//所屬區(qū)域
row = [XLFormRowDescriptor formRowDescriptorWithTag:tag[i] rowType:XLFormRowDescriporListTitle title:title[i]];
//value
row.value = list[i];
[section addFormRow:row];
}
然后實現(xiàn)通知
直接找到需要改變的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];
//先賦值 然后獲取到整體界面的高度
//獲取到之后取到高度
//然后取到當(dāng)前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一些簡單的用法我之前的文章里面有寫到過,可以去看看