在項目開發(fā)中剂买,我們偶爾會用到表格來展示一些數(shù)據(jù)狐肢,但是在iOS的現(xiàn)有控件中添吗,對于表格支持的不好,應(yīng)該說并沒有支持份名,所以碟联,造了一個表格的輪子,根據(jù)數(shù)據(jù)驅(qū)動實現(xiàn)不同的表格樣式及交互事件僵腺,先來看看效果
-
圖一:
-
圖二:
-
圖三:
還算比較簡單鲤孵,由于項目中還存在抬頭數(shù)量不同的情況(圖二與圖三),以及對特定的item具有點擊事件辰如,所以如果沒有一個通用的輪子普监,在做UI的時候,還是比較麻煩的琉兜。
處理方案:
1.整個外部采用的是一個tableView凯正,我們稱為外部tableView
2.cell中的每行也還是一個tableview,我們稱為內(nèi)部tableView
3.內(nèi)部tableView的cell就是collectionview了豌蟋,每一個item廊散,都是uicollectionviewCell
4.然后再針對item的樣式,事件進行定制化開發(fā)夺饲。
樣式說明
可以調(diào)整每個item的占比,文字的大小施符,顏色往声,對齊方式,是否存在邊框線戳吝,以及是否有點擊事件
數(shù)據(jù)模型
內(nèi)層樣式
FTFormItemModel
/** 顯示內(nèi)容 */
@property (strong, nonatomic) NSString *title;
/** 字體顏色 */
@property (strong, nonatomic) UIColor *textColor;
/** 字體大小 (默認12)*/
@property (assign, nonatomic) CGFloat fontSize;
/** 位置:居中浩销,靠左,靠右等(默認居中) */
@property (assign, nonatomic) NSTextAlignment textAlignment;
/** 寬度比率听哭,默認為:1 (假設(shè)比率為1慢洋,一行總共4個數(shù)據(jù),則寬度為 ) 0.25 * SCREEN_WIDTH */
@property (assign, nonatomic) CGFloat widthRate;
/** 背景色 */
@property (strong, nonatomic) UIColor *backgroundColor;
/** 文字或圖片 */
@property (assign, nonatomic) FTFormItemType formItemType;
#pragma mark - ################內(nèi)容的展開################
/** 次級內(nèi)容 */
@property (strong, nonatomic) NSString *subTitle;
/** 次級字體顏色 */
@property (strong, nonatomic) UIColor *subTextColor;
/** 次級字體大小 (默認12)*/
@property (assign, nonatomic) CGFloat subFontSize;
/** 是否允許點擊 */
@property (assign, nonatomic, getter=isAllowTap) BOOL allowTap;
@property (assign, nonatomic, getter=isNextPage) BOOL nextPage;
外層數(shù)據(jù)
FTFormModel
/** 行高:默認44 */
@property (assign, nonatomic) CGFloat rowHeight;
/** 寬度比率總和 */
@property (assign, nonatomic) CGFloat widthRateTotal;
/** 背景色 */
@property (strong, nonatomic) UIColor *backgroundColor;
/** 邊距 */
@property (nonatomic) UIEdgeInsets edgeInsets;
/** 分隔線長度:為0時則達到隱藏分隔線的效果陆盘,默認占滿整行 */
@property (assign, nonatomic, ) CGFloat separateLineWidth;
/** item數(shù)據(jù) */
@property (strong, nonatomic) NSArray <FTFormItemModel *> *formItemArray;
/** 屬于第幾條數(shù)據(jù) */
@property (assign, nonatomic) NSInteger index;
#pragma mark - ################內(nèi)容的展開################
/** sub寬度比率總和 */
@property (assign, nonatomic) CGFloat subWidthRateTotal;
/** 內(nèi)邊距 */
@property (nonatomic) UIEdgeInsets subEdgeInsets;
/** 子項集合 */
@property (strong, nonatomic) NSArray <FTFormItemModel *> *subItemArray;
/** 選中狀態(tài) */
@property (assign, nonatomic, getter=isSelectedStatus) BOOL selectedStatus;
完整Demo:GitHub