iOS表单之XLFrom的使用(更新隐藏显示,删除)

尴尬。截图不知道怎么控制图片大小,所以就不贴图片了。

近期谢了一个关于表单提交的项目模块:
就类似企业内部管理中申请模块,基本上全部是表单提交数据:

所以就找到了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有两个属性:formValuedisplayText

displayTextString类型放外面显示的名字
formValueid类型 随便存什么东西,去相对应就好了

注意:

前面赋值用

[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";

你可能感兴趣的:(iOS表单之XLFrom的使用(更新隐藏显示,删除))