最近公司要做新项目,趁着现在不忙赶紧将一些知识点提前储备下,由于产品是一款安全产品,需要输入好多信息而且产品的需求又非常细,所以想讲页面做成那种可以配置的,期初简直是让我蛋都碎了,不过还好有强大的github,找到了这个XLForm,它可以方便的进行配置界面省时省力,所以将了解到的东西赶紧记下来,以后好方便开发
Multivalued sections(增加,删除,移动行)
任何的XLFormSectionDescriptor对象都支持增加,删除,移动行数据,模式是可以配置的首先先是建立一组数据API:
section = [XLFormSectionDescriptor formSectionWithTitle:@"Multivalued TextField"
sectionOptions: XLFormSectionOptionCanReorder|XLFormSectionOptionCanInsert | XLFormSectionOptionCanDelete
sectionInsertMode:XLFormSectionInsertModeButton];
如上面所示,第二个参数可以根据配置得到支持任何增删改的组合形式
第三个参数为增加的行数据进入界面的方式,XLFormSectionInsertModeLastRow (从右向左滑动进入) XLFormSectionInsertModeButton(从上到下进入) 第一个为默认参数
动态添加例子
- (id)init
{
XLFormDescriptor * form; //建立表单,等同于创建uitableview
XLFormSectionDescriptor * section;//建立组 section
XLFormRowDescriptor * row;//建立行相当于cell
//动态的将要添加一下行添加到组里
NSArray * nameList =@[@"family",@"male",@"female",@"client"];
form = [XLFormDescriptorformDescriptorWithTitle:@"Multivalued examples"];
// 初始化每个cell的类型与属性
section = [XLFormSectionDescriptorformSectionWithTitle:@"MultiValued TextField"
sectionOptions:XLFormSectionOptionCanReorder | XLFormSectionOptionCanInsert |XLFormSectionOptionCanDelete];
section.multivaluedTag =@"textFieldRow";
[form addFormSection:section];
//添加循环遍历数组动态添加数据 思考可以将数组做成plist文件,这样可以单独配置有需求可以修改
for (NSString * tagin nameList) {
// 创建一个单行输入框
row = [XLFormRowDescriptorformRowDescriptorWithTag:nilrowType:XLFormRowDescriptorTypeTexttitle:nil];
//设置placeholder
[[row cellConfig]setObject:@"Add a new tag"forKey:@"textField.placeholder"];
//添加默认值
row.value = [tagcopy];
//添加到一组中
[section addFormRow:row];
}
// 最后添加看一个添加按钮
row = [XLFormRowDescriptorformRowDescriptorWithTag:nilrowType:XLFormRowDescriptorTypeTexttitle:nil];
[[row cellConfig]setObject:@"Add tag"forKey:@"textField.placeholder"];
[section addFormRow:row];
return [superinitWithForm:form];
}
获取值
你能在-(NSDictionary *)formValues中获取所有的行信息,或者是XLFormViewController实例和XLFormDescriptor实例
XLForm添加值添加在行信息XLFormRowDescriptor中,它属于XLFormSectionDescriptor,用建立XLFormRowDescriptor时传入的Tag还获取值,其中并不存multivaluedTag。
每一个组信息中都存在着一个multivaluedTag值,里面存在着当前组内的行信息的数组multivaluedTag值为Key
例如:
//根据 section.multivaluedTag = @"textFieldRow" 获取到相应的组信息,打印出来的为当前组的所有行的value
NSArray * tempvalues =form.formValues[@"textFieldRow"];
NSLog(@"%@",form.formValues[@"textFieldRow"]);
//formSections中存储着表单中所有组的指针
XLFormSectionDescriptor * tempsection=form.formSections[0];
//重新遍历一次,值是一样的
for (int index=0; index