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

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

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

所以就找到了XLFrom做界面开发,开始用起来还是不太习惯,慢慢就好了。最主要就是关于XLFrom网上的资料太少了。

不扯远了,上代码:
首先,这个XLFrom是一个以UITableView为基础的框架。但是也不需要tableview的代理,基本上需要实现的东西XLFrom里面都实现了,如果另有需求,当我没说。

注意:

.h文件的话 需要继承XLFormViewController

#import <XLForm/XLForm.h>
@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";
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,176评论 5 469
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,190评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,232评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,953评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,879评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,177评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,626评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,295评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,436评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,365评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,414评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,096评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,685评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,771评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,987评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,438评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,032评论 2 341

推荐阅读更多精彩内容