UITableView设置界面完整封装(一)

简单MVC实现UITableView设置界面分组数据显示

一:模型

1:cell模型

 /** 描述cell图片 */

 @property (nonatomic, strong) UIImage *image;

 /** 描述cell文字 */

 @property (nonatomic, strong) NSString *title;
 

// 根据行模型确定cell右边辅助视图

// 1.提供一个类型枚举,箭头,开头

// 2.用子类去判断cell的类型

+ (instancetype)itemWithImage:(UIImage *)image title:(NSString *)title;

实现文件

 + (instancetype)itemWithImage:(UIImage *)image title:(NSString *)title

 {

     iCocosSettingItem *item = [[self alloc] init];

     item.image = image;

     item.title = title;

     return item;

 }

2:分组模型

 /** 描述当前组有多少行 */

 @property (nonatomic, strong) NSArray *items;

 /** 头部标题 */

 @property (nonatomic, strong) NSString *headerTitle;

 /** 尾部标题 */

 @property (nonatomic, strong) NSString *footerTitle;

 + (instancetype)groupWithItems:(NSArray *)items;

实现文件

 + (instancetype)groupWithItems:(NSArray *)items

 {

     iCocosGroupItem *group = [[self alloc] init];

     group.items = items;

     return group;

 }

二:视图

 @interface iCocosSettingCell : UITableViewCell

 + (instancetype)cellWithTableView:(UITableView *)tableView;

 /** item行模型,描述cell的外观 */

 @property (nonatomic, strong) iCocosSettingItem *item;

实现文件

 + (instancetype)cellWithTableView:(UITableView *)tableView

 {

     static NSString *ID = @"cell";

     XMGSettingCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];

     if (cell == nil) {

         cell = [[iCocosSettingCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];

     }

     return cell;

 }

 - (void)setItem:(iCocosSettingItem *)item

 {

     _item = item;

     // 设置子控件数据

     [self setUpData];

     // 设置辅助视图

     [self setUpAccessoryView];

 }

 #pragma mark - 设置辅助视图

 - (void)setUpData

 {

     self.imageView.image = _item.image;

     self.textLabel.text = _item.title;

 }

 #pragma mark - 设置辅助视图

 - (void)setUpAccessoryView

 {

     // 设置辅助视图

     if ([_item isKindOfClass:[iCocosSettingArrowItem class]]) {

         // 展示箭头

         UIImageView *arrowView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrow_right"]];

         self.accessoryView = arrowView;

     }else if ([_item isKindOfClass:[iCocosSettingSwitchItem class]]){

         // 展示开关

         UISwitch *switchView = [[UISwitch alloc] init];

         self.accessoryView = switchView;

     }else{

         self.accessoryView = nil;

     }

 }

三:控制器


 @interface iCocosSettingViewController ()

 // 总共的组数

 @property (nonatomic, strong) NSMutableArray *groups;

 @end

 @implementation iCocosSettingViewController

 - (NSMutableArray *)groups

 {

     if (_groups == nil) {

         _groups = [NSMutableArray array];

     }

     return _groups;

 }

 - (instancetype)init

 {

     return [self initWithStyle:UITableViewStyleGrouped];

 }

 - (void)viewDidLoad {

     [super viewDidLoad];

     // 添加第0组

     [self setUpGroup0];

     // 添加第1组

     [self setUpGroup1];

     // 添加第2组

     [self setUpGroup2];

 }

 // 添加第0组

 - (void)setUpGroup0

 {

     // 创建行模型

     // 使用兑换码

     iCocosSettingItem *RedeemCode = [iCocosSettingArrowItem itemWithImage:[UIImage imageNamed:@"RedeemCode"] title:@"使用兑换码"];

     // Items:存储当前数组有多少行模型

     // 创建一个组模型,描述第0组

     iCocosGroupItem *group = [iCocosGroupItem groupWithItems:@[RedeemCode]];

     // 设置头部标题

     group.headerTitle = @"abc";

     // 添加组模型到groups数组,有多少个组模型就有多少组

     [self.groups addObject:group];

 }

 // 添加第1组

 - (void)setUpGroup1

 {

     // 使用兑换码

     iCocosSettingItem *RedeemCode = [iCocosSettingArrowItem itemWithImage:[UIImage imageNamed:@"RedeemCode"] title:@"使用兑换码"];

     // 使用兑换码

     iCocosSettingItem *RedeemCode1 = [iCocosSettingSwitchItem itemWithImage:[UIImage imageNamed:@"RedeemCode"] title:@"使用兑换码"];

     // 使用兑换码

     iCocosSettingItem *RedeemCode2 = [iCocosSettingSwitchItem itemWithImage:[UIImage imageNamed:@"RedeemCode"] title:@"使用兑换码"];

     // 使用兑换码

     iCocosSettingItem *RedeemCode3 = [iCocosSettingSwitchItem itemWithImage:[UIImage imageNamed:@"RedeemCode"] title:@"使用兑换码"];

      // 描述第一组有多少个行模型,描述第1组

     NSArray *items = @[RedeemCode,RedeemCode1,RedeemCode2,RedeemCode3];

     // 创建组模型

     iCocosGroupItem *group = [iCocosGroupItem groupWithItems:items];

     group.headerTitle = @"asd";

     group.footerTitle = @"asdasdq";

     // 添加到group总数组

     [self.groups addObject:group];

 }

 // 添加第2组

 - (void)setUpGroup2

 {

     // 使用兑换码

     iCocosSettingItem *RedeemCode = [iCocosSettingArrowItem itemWithImage:[UIImage imageNamed:@"RedeemCode"] title:@"使用兑换码"];

     // 使用兑换码

     iCocosSettingItem *RedeemCode1 = [iCocosSettingArrowItem itemWithImage:[UIImage imageNamed:@"RedeemCode"] title:@"使用兑换码"];

     // 使用兑换码

     iCocosSettingItem *RedeemCode2 = [iCocosSettingArrowItem itemWithImage:[UIImage imageNamed:@"RedeemCode"] title:@"使用兑换码"];

     // 使用兑换码

     iCocosSettingItem *RedeemCode3 = [iCocosSettingArrowItem itemWithImage:[UIImage imageNamed:@"RedeemCode"] title:@"使用兑换码"];

     // 描述第一组有多少个行模型,描述第1组

     NSArray *items = @[RedeemCode,RedeemCode1,RedeemCode2,RedeemCode3];

     // 创建组模型

     iCocosGroupItem *group = [iCocosGroupItem groupWithItems:items];

     group.footerTitle = @"bcd";

     // 添加到group总数组

     [self.groups addObject:group];

 }

 #pragma mark - 数据源

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

 {

     return self.groups.count;

 }

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

 {

     // 取出当前的组模型

     iCocosGroupItem * group = self.groups[section];

     return group.items.count;

 }

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

 {

     // 1.创建cell

    iCocosSettingCell *cell =  [iCocosSettingCell cellWithTableView:tableView];

     // 取模型

     // 哪一组的模型

     iCocosGroupItem *group = self.groups[indexPath.section];

     // 从模型数组数组中取出对应的模型

     iCocosSettingItem *item = group.items[indexPath.row];

     // 2.给cell传递模型,给cell的子控件赋值

     cell.item = item;

     return cell;

 }

 // 返回第section组的头部标题

 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

 {

    // 取出当前是哪一组

     iCocosGroupItem *group = self.groups[section];

     return group.headerTitle;

 }

 // 返回第section组的尾部标题

 - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section

 {

     // 取出当前是哪一组

     iCocosGroupItem *group = self.groups[section];

     return group.footerTitle;

 }

 @end

最终的现实界面

最新文章

  1. Java锁之自旋锁详解
  2. 记录一下JS正则的坑
  3. php数组使用小结
  4. Flashback Drop实例操作
  5. cdoj 秋实大哥与战争
  6. SqlHelp
  7. css3 animation 参数详解
  8. jdbc连接数据库的步骤
  9. Fragment防止自动清理 (ViewPager滑动时,滑出屏幕后被清理)(转)
  10. [10] 过滤器 Filter
  11. business expressions(二)
  12. Django rest framework(7)----分页
  13. js属性对象的hasOwnProperty方法
  14. 算法题——给定一个数组 arr,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
  15. FastReport.Net报表故障排除方法
  16. SSD卡对redis的影响
  17. AdaBoost, LogitBoost and GradientBoosting
  18. jakson
  19. 【转】我为什么把think in java 读了10遍
  20. andorid UI事件 监听器

热门文章

  1. 【转载】Python中如何高效实现两个字典合并,三种方法比较。
  2. To follow the path
  3. R command
  4. CentOS6.5修改mysql数据文件路径
  5. home-brew 安装&下载
  6. Android内存管理之道
  7. binarySearch二分查找——Javascript实现
  8. [原创]Devexpress XtraReports 系列 7 创建Drill-Down(向下钻取)报表
  9. POJ 1696 Space Ant(极角排序)
  10. Codeforces 687C. The Values You Can Make (dp)