尴尬。截图不知道怎么控制图片大小,所以就不贴图片了。
近期谢了一个关于表单提交的项目模块:
就类似企业内部管理中申请模块,基本上全部是表单提交数据:
所以就找到了XLFrom做界面开发,开始用起来还是不太习惯,慢慢就好了。最主要就是关于XLFrom网上的资料太少了。
不扯远了,上代码:
首先,这个XLFrom是一个以UITableView为基础的框架。但是也不需要tableview的代理,基本上需要实现的东西XLFrom里面都实现了,如果另有需求,当我没说。
注意:
.h文件的话 需要继承XLFormViewController
#import
@interface DemoViewController : XLFormViewController
@end
实现:
初始化form表单
// 表单对象
XLFormDescriptor *form;
// 初始化form 添加title
form = [XLFormDescriptor formDescriptorWithTitle:@""];
接着创建section 和row
// 表单Section对象
XLFormSectionDescriptor *section;
// 表单Row对象
XLFormRowDescriptor *row;
注意:下文中XLFormRowDescriporField
是自己定义类型的cell,如果不需要自己特殊定义的话,也可以参考From里面已经有的,文章最后贴出来
//部门
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"apartmentName" rowType:XLFormRowDescriporField title:@"部门"];
row.disabled = @NO;
row.value = departmentName;
[section addFormRow:row];
//姓名
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"memberName" rowType:XLFormRowDescriporField title:@"姓名"];
row.disabled = @NO;
row.value = userName;
[section addFormRow:row];
这个后面基本上就是重复的了,需要section就添加section,需要row就添加row添加自己想要的类型就可以了。
把库文件导入自己工程,偶尔去试一试有什么样的cell,我这边会添加自己用到过的几种。
然后关于取值:
我感觉最强大的就是它的取值了:
NSDictionary *dict = [self formValues];
NSLog(@"%@",dict);
这样就能将表单所有的值取出来,以一个字典的形式,可以自己打印看看,里面的键就是设置的“tag”
注意:
这个表单在全局不管哪个地方都能取到其中的cell
//直接赋值
[self.form formRowWithTag:@"list"].value = [XLFormOptionsObject formOptionsObjectWithValue:id displayText:@"1"];
//单独取出来一个row,可以对这个row进行处理
XLFormRowDescriptor * list = [self.form formRowWithTag:@"list"];
其中有一个选择的类型赋值,我在网上没有找到资料,自己看到的。
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"list" rowType:XLFormRowDescriporChooseSelector title:@"列表"];
row.selectorOptions = @[@"请选择列表值"];
//就这个value这里,利用XLFormOptionsObject对这个pickview进行赋值
row.value = [XLFormOptionsObject formOptionsObjectWithValue:@"" displayText:@"请选择"];
[section addFormRow:row];
关于XLFormOptionsObject
这个东西有点坑爹,最能体现的地方就是做值判断的时候,毕竟做表单提交,肯定是要判空或者判@""
XLFormOptionsObject
有两个属性:formValue
和displayText
displayText
是String
类型放外面显示的名字
formValue
是id
类型 随便存什么东西,去相对应就好了
注意:
前面赋值用
[XLFormOptionsObject formOptionsObjectWithValue:@"" displayText:@"请选择"];
不然后面不好进行判断
判断:
//我这里formValue存的是一个字符串,如果你们存的是id类型的,判空就行了
XLFormOptionsObject * listData = dict[@"list"];
if ([listData.formValue isEqualToString:@""] || [listData.displayText isEqualToString:@"请选择"]) {
//提示语句
return NO;
}
更更更更更新
一个动态隐藏cell
刚刚用到一个关于动态隐藏的地方,找了官方的Demo弄了半天才弄好,其实本来并不是很麻烦只需要利用NSPredicate
就可以了,但是由于已经把大家带到了XLFormOptionsObject
这个坑里面,还是填补一下比较好
他们文档里面是执行这个方法
-(void)setHidden:(id)hidden
{
if ([_hidden isKindOfClass:[NSPredicate class]]){
[self.sectionDescriptor.formDescriptor removeObserversOfObject:self predicateType:XLPredicateTypeHidden];
}
_hidden = [hidden isKindOfClass:[NSString class]] ? [hidden formPredicate] : hidden;
if ([_hidden isKindOfClass:[NSPredicate class]]){
[self.sectionDescriptor.formDescriptor addObserversOfObject:self predicateType:XLPredicateTypeHidden];
}
[self evaluateIsHidden]; // check and update if this row should be hidden.
}
像用到了XLFormOptionsObject
这个来保存选择值的小伙子们可以这样进行判断:
//在选择完毕之后执行的方法
- (void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)formRow oldValue:(id)oldValue newValue:(id)newValue
{
//操作是选list 然后把其他的cell 隐藏起来
//判断是否选择了list hidden是NSPredicate处理问题
if ([formRow.tag isEqualToString:@"list"]) {
//用XLFormOptionsObject把数据接收出来
XLFormOptionsObject * obj = formRow.value;
//用formDisplayText 或者formValue做判断都行,不过最好是用formDisplayText毕竟判断字符好些
EAPLog(@"键:%@",obj.formDisplayText);
EAPLog(@"值:%@",obj.formValue);
//这里进行判断 就能执行了 NSPredicate里面还可以写很多判断方式
[self.form formRowWithTag:@"listTwo"].hidden =[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"'%@' contains 'hidden'",obj.formDisplayText]];
}
}
注意注意
看库里面的Demo如果没有用到XLFormOptionsObject
就方便多了。
都不用去执行方法里面去,直接在初始化的时候给他设置hidden就行了。“switch”指向的是这个cell的操作按钮,开关形式的。
//只要switch的value为1就显示第一个row,为0就隐藏
row = [XLFormRowDescriptor formRowDescriptorWithTag:kPredDep2 rowType:XLFormRowDescriptorTypeInteger title:@"Integer"];
row.hidden = [NSString stringWithFormat:@"$switch==0"];
[section addFormRow:row];
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"switch" rowType:XLFormRowDescriptorTypeBooleanSwitch title:@"Boolean"];
row.value = @1;
[section addFormRow:row];
暂时更新到这里。后面如果有用到继续更新...
尾部贴上XLFrom中cell类型,求大神帮我看下有哪些用途:
如有时间,还望不吝赐教,感激。。
#import "XLForm.h"
NSString *const XLFormRowDescriptorTypeText = @"text";
NSString *const XLFormRowDescriptorTypeName = @"name";
NSString *const XLFormRowDescriptorTypeURL = @"url";
NSString *const XLFormRowDescriptorTypeEmail = @"email";
NSString *const XLFormRowDescriptorTypePassword = @"password";
NSString *const XLFormRowDescriptorTypeNumber = @"number";
NSString *const XLFormRowDescriptorTypePhone = @"phone";
NSString *const XLFormRowDescriptorTypeTwitter = @"twitter";
NSString *const XLFormRowDescriptorTypeAccount = @"account";
NSString *const XLFormRowDescriptorTypeInteger = @"integer";
NSString *const XLFormRowDescriptorTypeImage = @"image";
NSString *const XLFormRowDescriptorTypeDecimal = @"decimal";
NSString *const XLFormRowDescriptorTypeTextView = @"textView";
NSString *const XLFormRowDescriptorTypeZipCode = @"zipCode";
NSString *const XLFormRowDescriptorTypeSelectorPush = @"selectorPush";
NSString *const XLFormRowDescriptorTypeSelectorPopover = @"selectorPopover";
NSString *const XLFormRowDescriptorTypeSelectorActionSheet = @"selectorActionSheet";
NSString *const XLFormRowDescriptorTypeSelectorAlertView = @"selectorAlertView";
NSString *const XLFormRowDescriptorTypeSelectorPickerView = @"selectorPickerView";
NSString *const XLFormRowDescriptorTypeSelectorPickerViewInline = @"selectorPickerViewInline";
NSString *const XLFormRowDescriptorTypeMultipleSelector = @"multipleSelector";
NSString *const XLFormRowDescriptorTypeMultipleSelectorPopover = @"multipleSelectorPopover";
NSString *const XLFormRowDescriptorTypeSelectorLeftRight = @"selectorLeftRight";
NSString *const XLFormRowDescriptorTypeSelectorSegmentedControl = @"selectorSegmentedControl";
NSString *const XLFormRowDescriptorTypeDateInline = @"dateInline";
NSString *const XLFormRowDescriptorTypeDateTimeInline = @"datetimeInline";
NSString *const XLFormRowDescriptorTypeTimeInline = @"timeInline";
NSString *const XLFormRowDescriptorTypeCountDownTimerInline = @"countDownTimerInline";
NSString *const XLFormRowDescriptorTypeDate = @"date";
NSString *const XLFormRowDescriptorTypeDateTime = @"datetime";
NSString *const XLFormRowDescriptorTypeTime = @"time";
NSString *const XLFormRowDescriptorTypeCountDownTimer = @"countDownTimer";
NSString *const XLFormRowDescriptorTypeDatePicker = @"datePicker";
NSString *const XLFormRowDescriptorTypePicker = @"picker";
NSString *const XLFormRowDescriptorTypeSlider = @"slider";
NSString *const XLFormRowDescriptorTypeBooleanCheck = @"booleanCheck";
NSString *const XLFormRowDescriptorTypeBooleanSwitch = @"booleanSwitch";
NSString *const XLFormRowDescriptorTypeButton = @"button";
NSString *const XLFormRowDescriptorTypeInfo = @"info";
NSString *const XLFormRowDescriptorTypeStepCounter = @"stepCounter";