亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS開發之XLForm的使用方法

2020-07-26 02:25:00
字體:
來源:轉載
供稿:網友

在iOS開發中,開發"表單"界面,字段稍微多一點的一般都用UITableView來做,而XLForm就是這樣一個框架,它是創建動態表格視圖最牛逼的iOS庫, 用它實現表單功能,非常簡單,省心省力。但是很可惜,搜索了很多文章都只是翻譯官方文檔,很多人在使用該庫的時候可能都被官方文檔帶走遠了,不知道如何具體使用。正好最近也要用到這個庫,所以寫個入門使用文章供大家參考。

一、 導入項目

使用CocoaPods或者手動導入庫文件,本人選擇直接導入項目源文件的方式。

 

導入項目.png

二、改造表單ViewController

讓ViewController繼承自XLFormViewController,并重寫下面的兩個方法

@interface OneViewController : XLFormViewController@end@implementation OneViewController- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {  self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  if (self){    [self initializeForm];  }  return self;}- (id)initWithCoder:(NSCoder *)aDecoder {  self = [super initWithCoder:aDecoder];  if (self){    [self initializeForm];  }  return self;}@end

三、構造表單

- (void)initializeForm {    // 設置是否顯示Cell之間分界線  //self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;  // 設置Section的高度  self.tableView.sectionHeaderHeight = 30;    XLFormDescriptor * form;//form,一個表單只有一個  XLFormSectionDescriptor * section;//section,一個表單可能有多個  XLFormRowDescriptor * row; //row,每個section可能有多個row    // Form  form = [XLFormDescriptor formDescriptor];    // First section  section = [XLFormSectionDescriptor formSection];  section.title = @"用戶";  [form addFormSection:section];  // 普通文本  row = [XLFormRowDescriptor formRowDescriptorWithTag:@"username" rowType:XLFormRowDescriptorTypeText];  // 設置placeholder  [row.cellConfig setObject:@"用戶名" forKey:@"textField.placeholder"];  // 設置文本顏色  [row.cellConfig setObject:[UIColor redColor] forKey:@"textField.textColor"];  [section addFormRow:row];  // 密碼  row = [XLFormRowDescriptor formRowDescriptorWithTag:@"password" rowType:XLFormRowDescriptorTypePassword];  // 設置placeholder的顏色  NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:@"密碼" attributes:                   @{NSForegroundColorAttributeName:[UIColor greenColor],                    }];  [row.cellConfig setObject:attrString forKey:@"textField.attributedPlaceholder"];  [section addFormRow:row];        // Second Section  section = [XLFormSectionDescriptor formSection];  section.title = @"日期";  [form addFormSection:section];  // 日期選擇器  row = [XLFormRowDescriptor formRowDescriptorWithTag:@"birthday" rowType:XLFormRowDescriptorTypeDate title:@"出生日期"];  row.value = [NSDate dateWithTimeIntervalSinceNow:60*60*24];  [section addFormRow:row];         // Third Section  section = [XLFormSectionDescriptor formSection];  section.title = @"頭像";  [form addFormSection:section];  // 圖片選擇  row = [XLFormRowDescriptor formRowDescriptorWithTag:@"userpic" rowType:XLFormRowDescriptorTypeImage];  [section addFormRow:row];        // Fourth Section  section = [XLFormSectionDescriptor formSection];  section.title = @"選擇器";  [form addFormSection:section];  // 選擇器  row = [XLFormRowDescriptor formRowDescriptorWithTag:@"sex" rowType:XLFormRowDescriptorTypeSelectorPush];  row.noValueDisplayText = @"暫無";  row.selectorTitle = @"性別選擇";  row.selectorOptions = @[@"男",@"女",@"其他"];  row.title = @"性別";  [row.cellConfigForSelector setObject:[UIColor redColor] forKey:@"textLabel.textColor"];  [row.cellConfigForSelector setObject:[UIColor greenColor] forKey:@"detailTextLabel.textColor"];  [section addFormRow:row];        // Fifth Section  section = [XLFormSectionDescriptor formSection];  section.title = @"加固";  [form addFormSection:section];  // 開關  row = [XLFormRowDescriptor formRowDescriptorWithTag:@"enforce" rowType:XLFormRowDescriptorTypeBooleanSwitch title:@"加固"];  [section addFormRow:row];      // Sixth Section  section = [XLFormSectionDescriptor formSection];  [form addFormSection:section];  // 按鈕  row = [XLFormRowDescriptor formRowDescriptorWithTag:@"conform" rowType:XLFormRowDescriptorTypeButton];  row.title = @"確定";  [section addFormRow:row];    self.form = form;}-(void)didSelectFormRow:(XLFormRowDescriptor *)formRow{  // 判斷是不是點擊了確定按鈕  if([formRow.tag isEqualToString:@"conform"] && formRow.rowType == XLFormRowDescriptorTypeButton){    //獲取表單所有到的值    NSDictionary *values = [self formValues];    NSLog(@"%@", values);  }    [super didSelectFormRow:formRow];}//重寫改該方法 上面的方法就不會調用了//-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{////  NSLog(@"%s", __func__);////}@end

四、效果圖

效果圖.png

五、總結

前面兩步是官方文檔中可以找到的,也很簡單,關鍵在于initializeForm方法中具體構造表單的過程,這里有必要強調幾點:

1.XLFormViewController實現了UITableViewDataSource, UITableViewDelegate,并且持有一個UITableView,這個從該類的聲明可以看出來,所以UITableView 、UITableViewDataSource, UITableViewDelegate中的方法都可以正常使用。

復制代碼 代碼如下:
@interface XLFormViewController : UIViewController<UITableViewDataSource, UITableViewDelegate, XLFormDescriptorDelegate, UITextFieldDelegate, UITextViewDelegate, XLFormViewControllerDelegate>

2.XLForm將表單抽象為Form,Section,Row三個層次,分別對應三個類

XLFormDescriptor * form;//form,一個表單只有一個XLFormSectionDescriptor * section;//section,一個表單可能有多個XLFormRowDescriptor * row; //row,每個section可能有多個row

3.每個表單中的具體信息最后都落腳到XLFormRowDescriptor中,通過它可以配置不同樣式的表單項,通過構造函數的rowType指定具體的表單類型,該框架提供了非常豐富的rowType,具體可以參考官方文檔說明。

4.更細化配置表單項就需要借助于XLFormRowDescriptor中的屬性進行配置,常用的有

@property (nonatomic, readonly, nonnull) NSMutableDictionary * cellConfig;@property (nonatomic, readonly, nonnull) NSMutableDictionary * cellConfigForSelector;

這個配置的時候,往往有同學不知道具體如何才能設置屬性,比如怎么設置表單輸入框的placeholder?更進一步如何設置placeholder 的顏色。其實它用到了KVC,因為它們兩個都是UITextField類中的屬性,那么直接進入UITextField查找,發現如下信息:

@property(nullable, nonatomic,copy)  NSString        *placeholder;  @property(nullable, nonatomic,copy)  NSAttributedString   *attributedPlaceholder NS_AVAILABLE_IOS(6_0);

那么設置起來就是

[row.cellConfig setObject:@"用戶名" forKey:@"textField.placeholder"]; [row.cellConfig setObject:attrString forKey:@"textField.attributedPlaceholder"];

注意這里的key的寫法,就是KVC的寫法。其他的屬性依此類推。

5.如何獲取設置好的表單的值?其實非常簡單,該框架提供一個方法formValues,它的返回類型是一個NSDictionary,其中key就是XLFormRowDescriptor設置時的Tag??梢灾苯釉诳刂破髦姓{用該方法獲取表單值,上面的效果圖設置后的表單信息如下:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品91久久久久久再现| 日本不卡免费高清视频| 日本欧美精品在线| 久热精品视频在线| 最近2019年中文视频免费在线观看| 韩国日本不卡在线| 日韩免费av一区二区| 欧美精品xxx| 国产精品黄视频| 一区二区三区天堂av| 91精品久久久久久久久久久| 欧美激情亚洲综合一区| 欧美日韩中文在线| 国产成人精品视频在线观看| 久久黄色av网站| 国产一区二区动漫| 欧洲精品在线视频| 久久精品一区中文字幕| 亚州精品天堂中文字幕| 久久国产精品首页| 裸体女人亚洲精品一区| 国产精品久久久久久亚洲调教| 亚洲性xxxx| 成人网在线免费观看| 一本色道久久综合亚洲精品小说| 欧美日韩黄色大片| 欧美中文在线观看国产| 国产一区二区三区在线视频| 欧美性xxxx在线播放| 97视频在线观看亚洲| 日韩视频免费在线观看| 国产精品啪视频| 国产精品视频一| 国产精品欧美日韩| 国产成人97精品免费看片| 久久91精品国产91久久久| 91精品国产色综合| 精品免费在线观看| 亚洲在线免费视频| 精品国产31久久久久久| 亚洲成人av资源网| 成人在线视频网站| 国产精品久久久久久久久久久久久久| 精品国产精品三级精品av网址| 91亚洲精品视频| 欧美日韩国产激情| 狠狠躁18三区二区一区| 亚洲自拍欧美色图| 91精品久久久久久久久久入口| 亚洲精品98久久久久久中文字幕| 最近免费中文字幕视频2019| 国产婷婷色综合av蜜臀av| 欧美激情视频在线| 色黄久久久久久| 日韩精品久久久久| 欧美成人精品在线播放| 狠狠做深爱婷婷久久综合一区| 国产精品免费久久久久久| 国产一级揄自揄精品视频| 国产精品久久久久7777婷婷| 在线国产精品视频| 国产视频一区在线| 国产精品第8页| 国产精品丝袜视频| 日本国产一区二区三区| 精品国产乱码久久久久久虫虫漫画| 亚洲综合第一页| 亚洲人成77777在线观看网| 亚洲精品成人久久久| www.欧美免费| 精品久久在线播放| 亚洲欧美一区二区三区久久| 永久免费毛片在线播放不卡| 狠狠色香婷婷久久亚洲精品| 黄色成人av网| 日韩精品久久久久久久玫瑰园| 日韩中文第一页| 精品久久久久人成| 国产日韩在线一区| 日韩高清有码在线| 综合136福利视频在线| 日韩精品免费综合视频在线播放| 亚洲精品国产精品乱码不99按摩| 久久久久久国产精品三级玉女聊斋| 中文字幕欧美日韩在线| 国产噜噜噜噜噜久久久久久久久| 亚洲男人天堂2024| 一区二区国产精品视频| 日韩视频免费在线观看| 久久久女女女女999久久| 国内免费久久久久久久久久久| 亚洲视频自拍偷拍| 国产精品久久久久久久久久ktv| 亚洲国产天堂久久国产91| 久久精品国产亚洲精品| 久久久久一本一区二区青青蜜月| 久久久999成人| 91丝袜美腿美女视频网站| 国产精品精品视频一区二区三区| 国模视频一区二区| 福利视频导航一区| 国产69久久精品成人看| 欧美电影第一页| 91久久综合亚洲鲁鲁五月天| 亚洲精品电影在线| 亚洲男人天堂九九视频| 欧美精品videos另类日本| 成人免费视频a| 欧美日韩综合视频网址| 亚洲欧洲日产国产网站| 一区二区av在线| 精品国产一区二区三区久久| 日韩高清免费在线| 亚洲精品在线观看www| 亚洲国产精品大全| 成人观看高清在线观看免费| 国产精品白丝jk喷水视频一区| 啪一啪鲁一鲁2019在线视频| 色多多国产成人永久免费网站| 国产亚洲精品综合一区91| 韩国日本不卡在线| 日韩高清电影免费观看完整版| 亚洲人永久免费| 亚洲精品成人网| 欧美高清电影在线看| 亚洲精品日韩久久久| 欧美精品电影免费在线观看| 欧美中文字幕精品| 欧美性猛交xxxx富婆| 久久综合伊人77777尤物| 久久国产精品电影| 亚洲性69xxxbbb| 国产69精品久久久久99| 亚洲第一区第一页| 日本国产高清不卡| 欧美性视频精品| 亚洲三级 欧美三级| 欧美日韩美女在线| 精品国产1区2区| 97视频免费看| 亚洲免费精彩视频| 日韩av快播网址| 97精品欧美一区二区三区| 国产91精品网站| 91久久精品国产91性色| 4k岛国日韩精品**专区| 欧美日韩国产二区| 国产欧美在线播放| 日韩精品中文字幕视频在线| 久久久亚洲网站| 姬川优奈aav一区二区| 国产成人精品av在线| 欧洲s码亚洲m码精品一区| 欧美激情综合色| 96精品视频在线| 91精品在线观| 国产精品嫩草影院一区二区| 日韩中文字幕免费看| 日韩精品中文字幕久久臀| 久久在线免费观看视频| 亚洲成人精品久久| 欧美午夜电影在线| 国产日韩av在线| 最近2019免费中文字幕视频三|