[iOS]在XLForm使用纯代码自定义表单

因项目需要用到大量的表单提交,最初我是通过自己纯代码敲一个一个控件的敲,随着表单需求多起来时,代码量有点大,后来尝试封装效果不理想,最终发现了这个XLForm解决了我心头之困,在很大程度上提高了表单制作的效率,也十分的灵活。其实网上也有很多关于此框架的文章,但发现对如何用纯代码自定义cell的表单编写没有文章介绍,以下就是我写的demo中的代码段的大致使用,有兴趣可下载我的demo结合来读 Demo传送门

集成框架

如一般第三方框架一样都需要导入到自己项目中XLForm,但要注意到是在你编写表单的控制器中需要继承XLFormViewController这个类

主要代码说明

<pre>初始化- (instancetype)init
{
self = [super init];
if (self) {
[self initializeForm];
}
return self;
}

要对表单中的行禁止编辑用到的属性
row.required = YES;

框架自带的button cell中要想点击出发方法用到的属性
row.action.formSelector = @selector(insertBtnClick);

若要获取表单中所有cell所填的值用到的方法如下,是以字典的方式保存
NSDictionary *allDict = [self formValues];
</pre>

自定义cell

自定义cell 有两个很重要的方法需要重写
<pre>
第一个:
此方法是用来设置属性的 必须重写 类似于初始化的属性不变的属性进行预先配置,纯代码在cell中添加控件和布局的代码也是写在此方法内
-(void)configure
{
[super configure];

__weak typeof (self) weakSelf = self;
UIButton *saveBtn = [UIButton buttonWithType:UIButtonTypeCustom];
saveBtn.backgroundColor = [UIColor clearColor];
[saveBtn setBackgroundImage:[UIImage imageNamed:@"btn_green_normal"] forState:UIControlStateNormal];
[saveBtn setTitle:@"保存" forState:UIControlStateNormal];

[weakSelf.contentView addSubview:saveBtn];
[saveBtn mas_makeConstraints:^(MASConstraintMaker *make) {
    make.centerY.equalTo(weakSelf.contentView);
    make.centerX.equalTo(weakSelf.contentView);
    make.width.equalTo(weakSelf.contentView).multipliedBy(0.8);
    make.height.equalTo(weakSelf.contentView).multipliedBy(0.8);
}];
[saveBtn addTarget:self action:@selector(saveBtnClick) forControlEvents:UIControlEventTouchUpInside];

}
</pre>

那问题来了,我点击了保存按钮,我在控制器中如何拿到保存继而出发要执行的方法,但这里貌似只能通过通知处理。
<pre>
-(void)saveBtnClick{

    [[NSNotificationCenter defaultCenter] postNotificationName:@"updataalterPswNotification" object:self];

}
</pre>

还有就是自定义pickerView选定后如何的数据控制器是如何拿到的呢,其实是通过将数据存到一个字典中,字典赋值给self.rowDescriptor.value
<pre>
-(void)saveClick{
WSDatePickerView *datepicker = [[WSDatePickerView alloc] initWithCompleteBlock:^(NSDate *startDate) {
NSString *date = [startDate stringWithFormat:@"yyyy-MM-dd "];
NSDictionary *dict = [NSDictionary dictionary];
dict = @{
@"data":date,
};

        _dataLabel.text = date;
    self.rowDescriptor.value = @{@"data":date};
    
}];
datepicker.datePickerStyle = DateStyleShowYearMonthDay;
datepicker.minLimitDate = [NSDate date:@"1970-1-01 " WithFormat:@"yyyy-MM-dd "];
datepicker.maxLimitDate = [NSDate date:@"2049-12-31 " WithFormat:@"yyyy-MM-dd "];
[datepicker show];

}

</pre>

而在控制器中,用之前说到的方法,就可以很开心的拿到pirkerView这一行的数据,其它的同理
<pre>
NSDictionary allDict = [self formValues];
</pre>
而点击了按钮后如何拿到cell中的值呢
接下来的是另一个重要的方法, 此方法是用来进行更新的,外面给唯一的字段Value设定值就好了 通过self.rowDescriptor.value的值变化来进行更新
<pre>
-(void)update{
[super update];

NSDictionary *value = self.rowDescriptor.value;
NSString *btnTag =  [value objectForKey:@"btnTag"];
_btnTag = btnTag;

}

</pre>

此外要想一开始就给自定义cell中一个初始值,也是通过self.rowDescriptor.value进行
首先需要通过字典形式在控制器给需要初始值的cell赋值,如:
<pre>
//生日
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"birthday" rowType:XLFormRowDescriptorTypePickerDataCell title:@"生日:"];
row.disabled = @NO;
row.value = @{@"data":birthday};
[section addFormRow:row];
中的row.value = @{@"data":birthday};这个属性赋值
/---------------------华丽的分割线------------------------------/
在自定义cell中也通过字典拿
NSDictionary *dict = [NSDictionary dictionary];
dict = @{
@"data":date,
};

        _dataLabel.text = date;
    self.rowDescriptor.value = @{@"data":date};

</pre>

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

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • 01 那天早上,我一打开房门,居然看到孩子还在穿袜子:“LT,你也才起来?你还没吃饭?” 因为那时候早读课的上课铃...
    西瓜甜甜啦阅读 637评论 13 31
  • 很多姑娘都希望拥有丰满的胸部,但并不是所有的愿望都是可以如愿以偿的。身材是天生,虽然通过后天的努力可以改变一部分,...
    futomix阅读 641评论 0 0
  • 当一个人失去愤怒的能力,是相当相当可怕的。 被抑制的愤怒,会向内自我攻击。做为一个活生生的人的所有知觉,都会丧失。...
    琴语阅读 273评论 1 1
  • 2016-9-6晴 这两天,有个朋友给我发来了一篇文章,主要写的是戒网瘾的故事,我看完后真的是不寒而栗…… 有的父...
    实干作品阅读 108评论 0 0