// // MTCommonListTableConfig.h // MTCommonListTable // // Created by ko1o on 2018/8/29. // Copyright © 2018年 ko1o. All rights reserved. // #import #define MTNullElement [NSNull null] typedef NS_ENUM(NSUInteger, MTCommonListTableCellStyle) { MTCommonListTableCellStyleNone, MTCommonListTableCellStyleDisclosureIndicator, MTCommonListTableCellStyleDetailButton, MTCommonListTableCellStyleCheckmark, MTCommonListTableCellStyleSwitch, MTCommonListTableCellStyleCenterLabelAction // 文字居中 处理事件(如微信的推出登录) }; typedef NS_ENUM(NSUInteger, MTCommonListTableCellSeparatorLeadingType) { MTCommonListTableCellSeparatorLeadingTypeLeadLeftmostItem, MTCommonListTableCellSeparatorLeadingTypeZero, MTCommonListTableCellSeparatorLeadingTypeLeadingImage, MTCommonListTableCellSeparatorLeadingTypeLeadingTitle, }; @class MTCommonListTableViewCell, MTCommonListTableViewController, MTCommonListTableConfig, MTCommonListTableCellConfig; typedef void(^MTCommonListTableCellDidSelectBlock)(MTCommonListTableViewController *tableViewController, NSIndexPath *indexPath, MTCommonListTableCellConfig *cellConfig); typedef void(^MTCommonListTableCellSwitchButtonChangeValueBlcok)(UISwitch *switchButton, MTCommonListTableViewCell *cell); typedef void(^MTCommonListTableCellDidLayoutSubviewsBlcok)(MTCommonListTableViewCell *cell); @interface MTCommonListTableCellConfig : NSObject @property (nonatomic, weak) MTCommonListTableConfig *tableConfig; // 自定义cell @property (nonatomic, strong) UITableViewCell *customCell; // for all style @property (nonatomic, copy) NSString *iconImageName; @property (nonatomic, strong) UIColor *backgroundColor; @property (nonatomic, copy) NSString *title; @property (nonatomic, copy) NSString *accessoryTitle; @property (nonatomic, assign) UITableViewCellSelectionStyle selectionStyle; @property (nonatomic, assign) UITableViewCellAccessoryType accessoryType; @property (nonatomic, strong) UIView *accessoryView; @property (nonatomic, weak) MTCommonListTableViewCell *cell; @property (nonatomic, assign) MTCommonListTableCellStyle style; @property (nonatomic, strong) UIColor *imageTintColor; @property (nonatomic, strong) MTCommonListTableCellDidLayoutSubviewsBlcok didLayoutSubviewsAction; // 以下这些属性如果为nil 使用table config 默认配置 @property (nonatomic, copy) MTCommonListTableCellDidSelectBlock cellAction; @property (nonatomic, strong) UIFont *titleFont; @property (nonatomic, strong) UIColor *titleColor; @property (nonatomic, assign) CGFloat imageMarginLeft; @property (nonatomic, assign) CGSize imageSize; @property (nonatomic, assign) CGFloat imageCornerRadius; @property (nonatomic, assign) CGFloat titleAndImageMargin; @property (nonatomic, strong) UIColor *accessoryTitleColor; @property (nonatomic, strong) UIFont *accessoryTitleFont; @property (nonatomic, copy) NSString *accessoryImageName; @property (nonatomic, copy) NSString *accessoryCheckMarkImageName; @property (nonatomic, copy) NSString *accessoryDetailImageName; @property (nonatomic, copy) NSString *accessoryDisclosureIndicatorImageName; @property (nonatomic, assign) CGFloat accessoryTitleAndImageMargin; @property (nonatomic, assign) CGSize accessoryImageSize; @property (nonatomic, assign) CGFloat height; @property (nonatomic, assign) MTCommonListTableCellSeparatorLeadingType separatorLeadingType; @property (nonatomic, assign) CGFloat separatorMarginLeft; // for `MTCommonListTableCellStyleSwitch` @property (nonatomic, strong) UISwitch *switchButton; @property (nonatomic, strong) UIColor *accessorySwitchButtonOnTintColor; @property (nonatomic, copy) MTCommonListTableCellSwitchButtonChangeValueBlcok switchButtonAction; // for `MTCommonListTableCellStyleCheckmark` @property (nonatomic, assign) BOOL checked; + (instancetype)defaultConfig; + (instancetype)configWithStyle:(MTCommonListTableCellStyle)style; @end @interface MTCommonListTableSectionConfig : NSObject @property (nonatomic, weak) MTCommonListTableConfig *tableConfig; @property (nonatomic, copy) NSAttributedString *headerAttributedTitle; @property (nonatomic, copy) NSString *headerTitle; @property (nonatomic, strong) UIFont *headerTitleFont; @property (nonatomic, strong) UIColor *headerTitleColor; @property (nonatomic, assign) UIEdgeInsets headerInset; @property (nonatomic, assign) CGFloat headerHeight; @property (nonatomic, strong) UIView *headerView; @property (nonatomic, copy) NSAttributedString *footerAttributedTitle; @property (nonatomic, copy) NSString *footerTitle; @property (nonatomic, strong) UIFont *footerTitleFont; @property (nonatomic, strong) UIColor *footerTitleColor; @property (nonatomic, assign) UIEdgeInsets footerInset; @property (nonatomic, assign) CGFloat footerHeight; @property (nonatomic, strong) UIView *footerView; @property (nonatomic, strong) NSArray *cellConfigs; + (instancetype)defaultConfig; @end @interface MTCommonListTableConfig : NSObject @property (nonatomic, copy) NSString *tableTitle; @property (nonatomic, strong) UIColor *tableBackgroundColor; @property (nonatomic, copy) NSArray *sectionConfigs; @property (nonatomic, assign) UITableViewCellSeparatorStyle separatorStyle; @property (nonatomic, assign) UITableViewStyle tableStyle; @property (nonatomic, assign) UIEdgeInsets tableContentInset; // 对所有cell生效 优先级低于cellConfig @property (nonatomic, assign) CGFloat cellImageMarginLeft; @property (nonatomic, assign) CGFloat cellTitleAndImageMargin; @property (nonatomic, assign) CGSize cellImageSize; @property (nonatomic, strong) UIColor *cellImageTintColor; @property (nonatomic, strong) UIColor *cellBackgroudColor; @property (nonatomic, assign) CGFloat cellImageCornerRadius; @property (nonatomic, strong) UIFont *cellTitleFont; @property (nonatomic, strong) UIColor *cellTitleColor; @property (nonatomic, strong) UIColor *cellAccessoryTitleColor; @property (nonatomic, strong) UIFont *cellAccessoryTitleFont; @property (nonatomic, assign) CGFloat cellAccessoryTitleAndImageMargin; @property (nonatomic, assign) CGSize cellAccessoryImageSize; @property (nonatomic, copy) NSString *cellAccessoryImageName; @property (nonatomic, copy) NSString *cellAccessoryCheckMarkImageName; @property (nonatomic, copy) NSString *cellAccessoryDetailImageName; @property (nonatomic, copy) NSString *cellAccessoryDisclosureIndicatorImageName; @property (nonatomic, assign) CGFloat cellHeight; @property (nonatomic, copy) MTCommonListTableCellDidSelectBlock cellAction; @property (nonatomic, assign) MTCommonListTableCellSeparatorLeadingType cellSeparatorLeadingType; @property (nonatomic, assign) CGFloat separatorMarginLeft; // 优先级高于cellSeparatorLeadingType // 对所有section生效 优先级低于sectionConfig @property (nonatomic, copy) NSString *sectionHeaderTitle; @property (nonatomic, strong) UIFont *sectionHeaderTitleFont; @property (nonatomic, strong) UIColor *sectionHeaderTitleColor; @property (nonatomic, assign) CGFloat sectionHeaderHeight; @property (nonatomic, assign) UIEdgeInsets sectionHeaderInset; @property (nonatomic, copy) NSString *sectionFooterTitle; @property (nonatomic, strong) UIFont *sectionFooterTitleFont; @property (nonatomic, strong) UIColor *sectionFooterTitleColor; @property (nonatomic, assign) UIEdgeInsets sectionFooterInset; @property (nonatomic, assign) CGFloat sectionFooterHeight; // 对所有section生效 优先级低于sectionConfig // Note:如果section无数据请使用`MTNullElement`占位! @property (nonatomic, copy) NSArray *sectionHeaderTitles; @property (nonatomic, copy) NSArray *sectionFooterTitles; @property (nonatomic, copy) NSArray *cellTitles; @property (nonatomic, copy) NSArray *cellImageNames; // 用于全局默认配置,通过该方法自定义默认配置 + (instancetype)sharedConfig; // 快速根据创建配置 eg. rowsArr = @[@3, @2, @5]; + (instancetype)defaultConfigWithRowsCountForSections:(NSArray *)rowsCountArr; + (instancetype)defaultConfigWithCellStyle:(MTCommonListTableCellStyle)style rowsCountForSections:(NSArray *)rowsCountArr; + (instancetype)defaultConfigWithCellConfig:(MTCommonListTableCellConfig *)cellConfig rowsCountForSections:(NSArray *)rowsCountArr; // 必须保证sectionConfigs有值 才可设置指定cell的config - (void)resetCellConfigForSection:(NSInteger)section row:(NSInteger)row config:(void(^)(MTCommonListTableCellConfig *cellConfig))config; - (void)resetCellConfigForRowsAtIndexPaths:(NSArray *)indexPaths config:(void(^)(MTCommonListTableCellConfig *config ,NSIndexPath *indexPath))config; - (MTCommonListTableCellConfig *)cellConfigForSection:(NSInteger)section row:(NSInteger)row; // 必须保证sectionConfigs有值 才可设置指定cell的config - (void)resetSectionConfigForSection:(NSInteger)section config:(void(^)(MTCommonListTableSectionConfig *sectionConfig))config; - (void)resetSectionConfigForSections:(NSArray *)sections config:(void(^)(MTCommonListTableSectionConfig *sectionConfig))config; - (MTCommonListTableSectionConfig *)sectionConfigForSection:(NSInteger)section; @end