_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __
/ / / / / _ _ _ / / / ╱ ╱ /__/ /_ _ _ _ _ _/
/ / / / / / / / ╱ ╱ _ _ / /
/ / / / / /_ _ _ / / ╱ ╱ / / / /
/ / / / / _ _ _ / / / \ \ / / / /
/ /_ __/ / / / / / \ \ / / / /
\ _ _ _ _ / /__/ /__/ \__\ /__/ /__/
複製代碼
UFFormView *formView = [UFFormView makeFormView:^(UFFormViewMaker * _Nonnull make) {
// TODO:設置表單樣式
}];
複製代碼
或者git
UFFormView *formView = [[UFFormView alloc] init];
// TODO:設置表單樣式
複製代碼
樣式就是設置UI控件的字體、顏色、對齊方式等一列屬性。包括:文本樣式UFTextStyle、標題樣式UFRowTitleStyle、手機驗證碼按鈕樣式UFMobileCodeStyle、單選按鈕樣式UFRadioGroupStyle、表單組樣式UFSectionStyle等。github
一、文本樣式objective-c
UFTextStyle *textStyle = [UFTextStyle makeTextStyle:^(UFRowTextStyleMaker * _Nonnull make) {
make
.color([UIColor redColor]) // 設置文本顏色
.font([UIFont systemFontOfSize:14]) // 設置文本字體
.textAlignment(NSTextAlignmentLeft); // 設置文本對齊方式
}];
複製代碼
或者api
UFTextStyle *textStyle = [[UFTextStyle alloc] init];
textStyle.color = [UIColor redColor]; // 設置文本顏色
textStyle.font = [UIFont systemFontOfSize:14]; // 設置文本字體
textStyle.textAlignment = NSTextAlignmentLeft; // 設置文本對齊方式
複製代碼
二、標題樣式安全
UFRowTitleStyle *titleStyle = [UFRowTitleStyle makeTitleStyle:^(UFRowTitleStyleMaker * _Nonnull make) {
make
.width(90) // 設置標題寬度
.color([UIColor redColor]) // 設置標題顏色
.font([UIFont systemFontOfSize:14]) // 設置標題字體
.textAlignment(NSTextAlignmentLeft); // 設置標題對齊方式
}];
複製代碼
或bash
UFRowTitleStyle *titleStyle = [[UFTextStyle alloc] init];
titleStyle.width = 90; // 設置標題寬度
titleStyle.color = [UIColor redColor]; // 設置標題顏色
titleStyle.font = [UIFont systemFontOfSize:14]; // 設置標題字體
titleStyle.textAlignment = NSTextAlignmentLeft; // 設置標題對齊方式
複製代碼
三、手機驗證碼樣式網絡
UFMobileCodeStyle *codeStyle = [UFMobileCodeStyle makeMobileCodeStyle:^(UFMobileCodeStyleMaker * _Nonnull make) {
make
.cornerRadius(10) // 設置按鈕圓角
.backgroundColor([UIColor redColor]) // 設置按鈕背景色
.separatorColor([UIColor lightGrayColor]) // 設置輸入框與按鈕之間分割線的顏色
.color([UIColor whiteColor]) // 設置按鈕標題顏色
.font([UIFont systemFontOfSize:14]) // 設置按鈕標題字體
.textAlignment(NSTextAlignmentLeft); // 設置按鈕標題對齊方式
}];
複製代碼
或字體
UFMobileCodeStyle *codeStyle = [[UFMobileCodeStyle alloc] init];
codeStyle.cornerRadius = 10; // 設置按鈕圓角
codeStyle.backgroundColor = [UIColor redColor]; // 設置按鈕背景色
codeStyle.separatorColor = [UIColor lightGrayColor] // 設置輸入框與按鈕之間分割線的顏色
codeStyle.color = [UIColor whiteColor]; // 設置按鈕標題顏色
codeStyle.font = [UIFont systemFontOfSize:14]; // 設置按鈕標題字體
codeStyle.textAlignment = NSTextAlignmentLeft; // 設置按鈕標題對齊方式
複製代碼
四、單選按鈕樣式spa
UFRadioGroupStyle *radioGroupStyle = [UFRadioGroupStyle makeRadioGroupStyle:^(UFRowRadioGroupStyleMaker * _Nonnull make) {
make
.image([UIImage imageNamed:@"radio_checked"]) // 未選中圖片
.selectedImage([UIImage imageNamed:@"radio_unchecked"]); // 選中圖片
}];
複製代碼
或3d
UFRadioGroupStyle *radioGroupStyle = [[UFRadioGroupStyle alloc] init];
radioGroupStyle.image = [UIImage imageNamed:@"radio_checked"]; // 未選中圖片
radioGroupStyle.selectedImage = [UIImage imageNamed:@"radio_unchecked"]; // 選中圖片
複製代碼
一、添加左側標題樣式
[UFFormView makeFormView:^(UFFormViewMaker * _Nonnull make) {
make
.titleStyle([UFRowTitleStyle makeTitleStyle:^(UFRowTitleStyleMaker * _Nonnull make) {
// TODO:設置標題樣式(參考如何建立標題樣式)
}]);
}];
複製代碼
或
UFRowTitleStyle *titleStyle = [[UFRowTitleStyle alloc] init];
// TODO:設置標題樣式(參考如何建立標題樣式)
formView.titleStyle = titleStyle;
複製代碼
二、設置右側值樣式
UFFormView *formView = [UFFormView makeFormView:^(UFFormViewMaker * _Nonnull make) {
make
.valueStyle([UFTextStyle makeTextStyle:^(UFRowTextStyleMaker * _Nonnull make) {
// TODO:設置值樣式(參考如何建立文本樣式)
}]);
}];
複製代碼
或
UFTextStyle *valueStyle = [[UFTextStyle alloc] init];
// TODO:設置值樣式(參考如何建立文本樣式)
formView.valueStyle = valueStyle;
複製代碼
UFFormView *formView = [UFFormView makeFormView:^(UFFormViewMaker * _Nonnull make) {
make
.rowHeight(50);
}];
複製代碼
或
formView.rowHeight = 50;
複製代碼
UFSection *section = [UFSection makeSection:^(UFSectionMaker * _Nonnull make) {
}];
複製代碼
或
UFSection *section = [[UFSection alloc] init];
複製代碼
一、統一設置組內的表單樣式
UFSection *section = [UFSection makeSection:^(UFSectionMaker * _Nonnull make) {
make
// 設置標題樣式
.titleStyle([UFRowTitleStyle makeTitleStyle:^(UFRowTitleStyleMaker * _Nonnull make) { // TODO:設置標題樣式(參考如何建立標題樣式)
}])
// 設置值樣式
.valueStyle([UFTextStyle makeTextStyle:^(UFRowTextStyleMaker * _Nonnull make) {
// TODO:設置值樣式(參考如何建立文本樣式)
}]);
}];
複製代碼
或
UFSection *section = [[UFSection alloc] init];
// 設置標題樣式
UFRowTitleStyle *titleStyle = [[UFRowTitleStyle alloc] init];
// TODO:設置標題樣式(參考如何建立標題樣式)
section.titleStyle = titleStyle;
// 設置值樣式
UFTextStyle *valueStyle = [[UFTextStyle alloc] init];
// TODO:設置值樣式(參考如何建立文本樣式)
section.valueStyle = valueStyle;
複製代碼
二、設置組頭、腳樣式
[UFSection makeSection:^(UFSectionMaker * _Nonnull make) {
make
// 設置頭樣式
.headerStyle([UFSectionStyle makeSectionStyle:^(UFSectionStyleMaker * _Nonnull make) {
make
.height(30) // 設置頭高度
.text(@"頁眉") // 設置頭描述信息
.color([UIColor lightGrayColor]) // 設置頭描述信息顏色
.font([UIFont systemFontOfSize:12]) // 設置頭描述信息字體
.numberOfLines(0); // 設置頭描述信息多行
}])
// 設置腳樣式
.footerStyle([UFSectionStyle makeSectionStyle:^(UFSectionStyleMaker * _Nonnull make) {
make
.height(30) // 設置腳高度
.text(@"頁腳") // 設置腳描述信息
.color([UIColor lightGrayColor]) // 設置腳描述信息顏色
.font([UIFont systemFontOfSize:12]) // 設置腳描述信息字體
.numberOfLines(0); // 設置腳描述信息多行
}]);
}];
複製代碼
或
UFSection *section = [[UFSection alloc] init];
// 設置頭樣式
UFSectionStyle *headerStyle = [[UFSectionStyle alloc] init];
headerStyle.height = 30; // 設置頭高度
headerStyle.text = @"頁眉"; // 設置頭描述信息
headerStyle.color = [UIColor lightGrayColor]; // 設置頭描述信息顏色
headerStyle.font = [UIFont systemFontOfSize:12]; // 設置頭描述信息字體
headerStyle.numberOfLines = 0; // 設置頭描述信息多行
section.headerStyle = headerStyle;
// 設置腳樣式
UFSectionStyle *footerStyle = [[UFSectionStyle alloc] init];
footerStyle.height = 30; // 設置腳高度
footerStyle.text = @"頁腳"; // 設置腳描述信息
footerStyle.color = [UIColor lightGrayColor]; // 設置腳描述信息顏色
footerStyle.font = [UIFont systemFontOfSize:12]; // 設置腳描述信息字體
footerStyle.numberOfLines = 0; // 設置腳描述信息多行
section.footerStyle = footerStyle;
複製代碼
UFFormView *formView = [UFFormView makeFormView:^(UFFormViewMaker * _Nonnull make) {
make
.addSection([UFSection makeSection:^(UFSectionMaker * _Nonnull make) {
// TODO:設置組樣式
};
}];
複製代碼
或
[formView addSection:section];
複製代碼
UFRow // 文本
UFSubtitleRow // 子標題
UFTextFieldRow // 單行輸入
UFDatePickerRow // 日期選擇器
UFPickerViewRow // 單項選擇器
UFMultiplePickerViewRow // 多項選擇器
UFAreaPickerRow // 三級地址選擇器
UFCustomPickerViewRow // 自定義選擇器
UFTextViewRow // 多行輸入
UFMobileCodeRow // 手機驗證碼
UFAvatarRow // 頭像
UFRadioGroupRow // 單選
UFSwitchRow // 開關
UFPlateNumberRow // 車牌號碼
複製代碼
(1)UFRow
UFRow *row = [UFRow makeRow:^(UFRowMaker * _Nonnull make) {
make
.height(50) // 設置行高
.image([UIImage imageNamed:@"icon"]) // 設置圖標
.title(@"姓名") // 設置標題
.titleStyle([UFRowTitleStyle makeTitleStyle:^(UFRowTitleStyleMaker * _Nonnull make) {
make
.width(100) // 設置標題寬度,爲了對齊表單
.color([UIColor blackColor]) // 設置標題顏色
.font([UIFont systemFontOfSize:15]) // 設置標題字體
.textAlignment(NSTextAlignmentLeft); // 設置標題對齊方式
}]) // 設置標題樣式
.value(@"陳張利") // 設置默認值
.valueStyle([UFTextStyle makeTextStyle:^(UFRowTextStyleMaker * _Nonnull make) {
make
.color([UIColor blackColor]) // 設置值顏色
.font([UIFont systemFontOfSize:15]) // 設置值字體
.textAlignment(NSTextAlignmentRight); // 設置值對齊方式
}]) // 設置值樣式
.valueDidChanged(^(__kindof UFRow * _Nonnull row, NSString * _Nonnull value) {
// 監聽值得變化
})
.accessoryType(UFRowAccessoryDisclosureIndicator) // 設置行後的附件樣式,如箭頭、對號
.accessoryImage([UIImage imageNamed:@"arrow"]) // 自定義行後的附件圖片,如箭頭、對號
.rowDidSelected(^(__kindof UFRow * _Nonnull row) {
// 點擊行事件
})
.name(@"name"); // 行的名稱,可看作時字段的key,惟一值
}];
複製代碼
注:爲使行的右端對齊,你可以使用UFRowAccessorySpace進行佔位。
(2)UFSubtitleRow
UFSubtitleRow *subtitleRow = [UFSubtitleRow makeSubtitleRow:^(UFSubtitleRowMaker * _Nonnull make) {
make
.subtitle(@"推薦支付寶用戶使用") // 設置子標題
.subtitleStyle([UFRowTitleStyle makeTitleStyle:^(UFRowTitleStyleMaker * _Nonnull make) {
make
.width(140) // 設置子標題寬度
.font([UIFont systemFontOfSize:12]) // 設置子標題字體
.color([UIColor lightGrayColor]); // 設置子標題顏色
}]) // 設置子標題樣式
.accessoryImage([UIImage imageNamed:@"checked"]) // 自定義行後的附件圖片
.height(80) // 設置行高
.image([UIImage imageNamed:@"alipay"]) // 設置圖標
.title(@"支付寶") // 設置標題
.name(@"pay");
// 其餘屬性再也不贅述,參考UFRow設置
}];
複製代碼
(3)UFAvatarRow
UFAvatarRow *avatarRow = [UFAvatarRow makeAvatarRow:^(UFAvatarRowMaker * _Nonnull make) {
make
.cornerRadius(30) // 設置頭像圓角,圓角大小決定行高
.avatarImage([UIImage imageNamed:@"touxiang"]) // 設置默認頭像,網絡圖像不設置或加載失敗時,可做爲佔位頭像
.avatarDidSelected(^(__kindof UFAvatarRow * _Nonnull row, UIImageView * _Nonnull avatarView) {
// 點擊頭像事件
})
.title(@"頭像")
.value(@"http://img0.imgtn.bdimg.com/it/u=2572957358,1108684168&fm=26&gp=0.jpg") // 設置網絡圖片
.accessoryType(UFRowAccessorySpace)
.name(@"avatar");
// 其餘屬性再也不贅述,參考UFRow設置
}];
複製代碼
注:UFKit提供了UIViewControlle的選擇圖片的方法
[self ufk_pickerImageForResult:^(UIImage * _Nonnull image) {
}];
複製代碼
(4)UFRadioGroupRow
UFRadioGroupRow *radioGroupRow = [UFRadioGroupRow makeRadioGroupRow:^(UFRadioGroupRowMaker * _Nonnull make) {
make
.itemArray(@[@"男",@"女"]) // 設置選項
.editable(YES) // 是否容許編輯
.radioGroupStyle([UFRadioGroupStyle makeRadioGroupStyle:^(UFRowRadioGroupStyleMaker * _Nonnull make) {
make
.image([UIImage imageNamed:@"rg_unchecked"]) // 設置默認未選中圖片
.selectedImage([UIImage imageNamed:@"rg_checked"]); // 設置選中圖片
}])
.title(@"性別")
.value(@"男")
.accessoryType(UFRowAccessorySpace)
.name(@"gender");
// 其餘屬性再也不贅述,參考UFRow設置
}];
複製代碼
(5)UFTextFieldRow
UFTextFieldRow *textFieldRow = [UFTextFieldRow makeTextFieldRow:^(UFTextFieldRowMaker * _Nonnull make) {
make
.limitType(UFInputLimitTypeMobile) // 設置輸入限制
.editable(YES) // 是否容許編輯
.maxLength(11) // 設置最大輸入長度,設置limitType後該屬性可能會不起做用
.keyboardType(UIKeyboardTypeDefault) // 設置鍵盤樣式,設置limitType後該屬性可能會不起做用
.secureTextEntry(NO) // 是否安全輸入
.canPerformAction(YES) // 是否容許粘貼複製
.placeholder(@"請輸入") // 佔位字符,不設置時自動會添加請輸入title
.barTintColor([UIColor blackColor]) // 鍵盤上方取消/肯定的顏色
.title(@"聯繫方式")
.accessoryType(UFRowAccessorySpace)
.name(@"mobile");
// 其餘屬性再也不贅述,參考UFRow設置
}];
複製代碼
注: UFKit提供瞭如下輸入限制樣式,以便限制輸入框內輸入的內容。
typedef NS_ENUM(NSUInteger, UFInputLimitType) {
UFInputLimitTypeNone = 0, // 無限制
UFInputLimitTypeMobile, // 手機號碼
UFInputLimitTypeEmail, // 郵箱
UFInputLimitTypeIdCard, // 身份證號
UFInputLimitTypeNumbers, // 數字
UFInputLimitTypeLetters, // 字母
UFInputLimitTypeCapitalLetters, // 大寫字母
UFInputLimitTypeAlphanumeric, // 字母和數字
UFInputLimitTypeFloat, // 浮點數
UFInputLimitTypeMoney, // 金額(2位小數)
};
複製代碼
(5)UFMobileCodeRow
UFMobileCodeRow *mobileCodeRow = [UFMobileCodeRow makeCodeRow:^(UFCodeRowMaker * _Nonnull make) {
make
.codeStyle([UFMobileCodeStyle makeMobileCodeStyle:^(UFMobileCodeStyleMaker * _Nonnull make) {
make
.backgroundColor([UIColor whiteColor]) // 設置按鈕背景色
.cornerRadius(5) // 設置按鈕圓角
.separatorColor([UIColor lightGrayColor]); // 設置輸入框與按鈕之間分割線的顏色
// 其餘屬性再也不贅述,參考UFRowTextStyleMaker設置
}])
.codeDidClicked(^(__kindof UFMobileCodeRow * _Nonnull row, UIButton * _Nonnull button) {
//點擊獲取驗證碼事件
})
.maxLength(4)
.limitType(UFInputLimitTypeNumbers)
.title(@"驗證碼")
.accessoryType(UFRowAccessorySpace)
.name(@"code");
// 其餘屬性再也不贅述,參考UFTextFieldRow設置
}];
複製代碼
注:UFKit提供了UIButton的倒計時方法
[button ufk_countDown:60]; // 60s倒計時
複製代碼
(6)UFPickerViewRow
UFPickerViewRow *pickerViewRow = [UFPickerViewRow makePickerViewRow:^(UFPickerViewRowMaker * _Nonnull make) {
make
.itemArray(@[@"總經辦",@"行政部",@"人力資源部",@"財務部",@"產品部",@"技術部",@"運營部"]) // 設置選項
.title(@"部門")
.value(@"技術部")
.accessoryType(UFRowAccessoryDisclosureIndicator)
.name(@"org");
// 其餘屬性再也不贅述,參考UFTextFieldRow設置
}];
複製代碼
(7)UFAreaPickerRow
UFAreaPickerRow *areaPickerRow = [UFAreaPickerRow makeAreaPickerRow:^(UFAreaPickerRowMaker * _Nonnull make) {
make
.areaSeparator(@",") // 省市區之間的分割字符
.title(@"地址")
.accessoryType(UFRowAccessoryDisclosureIndicator)
.name(@"address");
// 其餘屬性再也不贅述,參考UFPickerViewRow設置
}];
複製代碼
(8)UFCustomPickerViewRow
UFCustomPickerViewRow *customPickerRow = [UFCustomPickerViewRow makeCustomPickerViewRow:^(UFCustomPickerViewRowMaker * _Nonnull make) {
make.
delegate(weakSelf) // 設置代理
.valueDidSelected(^(__kindof UFCustomPickerViewRow * _Nonnull row, UITextField * _Nonnull textField) {
// 選擇結束後的肯定事件
})
.title(@"選擇器")
.name(@"custom")
.accessoryType(UFRowAccessoryDisclosureIndicator);;
}];
複製代碼
UFCustomPickerViewRowDelegate
// 列數
- (NSInteger)numberOfComponentsInPickerViewRow:(UFCustomPickerViewRow *)pickerViewRow;
// 每列的行數
- (NSInteger)pickerViewRow:(UFCustomPickerViewRow *)pickerViewRow numberOfRowsInComponent:(NSInteger)component;
// 行標題
- (NSString *)pickerViewRow:(UFCustomPickerViewRow *)pickerViewRow titleForRow:(NSInteger)row forComponent:(NSInteger)component;
// 選中行
- (void)pickerViewRow:(UFCustomPickerViewRow *)pickerViewRow didSelectRow:(NSInteger)row inComponent:(NSInteger)component;
複製代碼
(9)UFMultiplePickerViewRow
UFMultiplePickerViewRow *multiplePickerViewRow = [UFMultiplePickerViewRow makeMultiplePickerViewRow:^(UFMultiplePickerViewRowMaker * _Nonnull make) {
make
.itemArray(@[@"看電影",@"旅遊",@"看書",@"打遊戲",@"籃球",@"足球",@"其餘"]) // 設置選項
.title(@"愛好")
.value(@"打遊戲,其餘")
.accessoryType(UFRowAccessoryDisclosureIndicator)
.name(@"hobby");
// 其餘屬性再也不贅述,參考UFTextFieldRow設置
}];
複製代碼
(10)UFDatePickerRow
UFDatePickerRow *datePickerRow = [UFDatePickerRow makeDatePickerRow:^(UFDatePickerRowMaker * _Nonnull make) {
make
.minimumDate(最小時間) // 最小時間
.maximumDate(最大時間) // 最大時間
.datePickerMode(UIDatePickerModeDate) // 時間選擇樣式
.dateFormat(@"yyyy-MM-dd") // 時間格式
.title(@"生日")
.value(@"2016-12-12")
.accessoryType(UFRowAccessoryDisclosureIndicator)
.name(@"birthday");
// 其餘屬性再也不贅述,參考UFTextFieldRow設置
}];
複製代碼
(11)UFPlateNumberRow
UFPlateNumberRow *plateNumberRow = [UFPlateNumberRow makePlateNumberRow:^(UFPlateNumberRowMaker * _Nonnull make) {
make
.title(@"車牌號")
.value(@"魯A12345")
.accessoryType(UFRowAccessorySpace)
.name(@"plate");
// 其餘屬性再也不贅述,參考UFTextFieldRow設置
}];
複製代碼
(12)UFTextViewRow
UFTextViewRow *textViewRow = [UFTextViewRow makeTextViewRow:^(UFTextViewRowMaker * _Nonnull make) {
make
.title(@"我的簡介")
.value(@"蘋果公司是美國一家高科技公司。由史蒂夫·喬布斯、斯蒂夫·沃茲尼亞克和羅·韋恩等人於1976年4月1日創立,總部位於加利福尼亞州的庫比蒂諾")
.accessoryType(UFRowAccessorySpace)
.name(@"introduction");
}];
複製代碼
(13)UFSwitchRow
UFSwitchRow *switchRow = [UFSwitchRow makeSwitchRow:^(UFSwitchRowMaker * _Nonnull make) {
make
.tintColor([UIColor redColor]) // 設置開關顏色
.title(@"免打擾")
.value(SWITCH_ON)
.accessoryType(UFRowAccessorySpace)
.valueDidChanged(^(__kindof UFRow * _Nonnull row, NSString * _Nonnull value) {
// 開關事件
})
.name(@"allow");
}];
複製代碼
注:UFKit提供了 SWITCH_ON (開)和 SWITCH_OFF (關)的常量定義
一、繼承UFRow建立其子類
二、繼承UFRowCell建立其子類
三、註冊Row和cell到formView
UFFormView *formView = [UFFormView makeFormView:^(UFFormViewMaker * _Nonnull make) {
make
.registerRow([CustomRow class], [CustomRowCell class]);
}];
複製代碼
UFSection *section = [UFSection makeSection:^(UFSectionMaker * _Nonnull make) {
make
.addRow(/*你定義的行*/);
}];
複製代碼
一、添加提交按鈕
UFActionButton *submitButton = [UFActionButton makeActionButton:^(UFActionButtonMaker * _Nonnull make) {
make
.titleForState(@"提交", UIControlStateNormal)
.titleColorForState([UIColor whiteColor], UIControlStateNormal)
.cornerRadius(22)
.backgroundColor([UIColor redColor])
.actionButtonClick(^(UFActionButton * _Nonnull button) {
// 點擊提交事件
});
}];
複製代碼
[UFFormView makeFormView:^(UFFormViewMaker * _Nonnull make) {
make
.addSubmitButton(submitButton)
.addCancelButton(cancelButton);
}];
複製代碼
二、獲取表單數據
[formView toDictionary];
複製代碼
'Masonry', '~> 1.1.0'
'SDWebImage', '~> 5.0.6'
'IQKeyboardManager', '~> 6.3.0'
pod 'UFKit'
QQ:893419255