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

最终的现实界面

iOS开发——开发必备OC篇&UITableView设置界面完整封装(一)的更多相关文章

  1. iOS开发——开发必备OC篇&UITableView设置界面完整封装(三)

    UITableView设置界面完整封装(三) 简单MVC实现UITableView设置界面之界面跳转 创建一个需要调整的对应的控制器 在需要调整的类型模型中创建对应的属性用来实现调整类型控制器的设置 ...

  2. iOS开发——开发必备OC篇&UITableView设置界面完整封装(二)

    UITableView设置界面完整封装(二) 简单MVC实现UITableView设置界面之Cell右边类型设置 首先来看看第一种方法证明使用,结合两种方法之后根据个人的爱好去选择就可以了, 一:使用 ...

  3. iOS开发——开发必备OC篇&UITableView设置界面完整封装(四)

    设置界面完整封装(四) 简单MVC实现UITableView设置界面完善封装及拓展使用 关于使用和拓展, 其实基本上就是同UItableView,知识讲数据改一下就可以 拓展使用 1:首先定义一个数组 ...

  4. ios开发——实用技术篇OC篇&iOS的主要框架

    iOS的主要框架         阅读目录 Foundation框架为所有的应用程序提供基本系统服务 UIKit框架提供创建基于触摸用户界面的类 Core Data框架管着理应用程序数据模型 Core ...

  5. iOS应用 跳转到系统的设置界面

    现在很多APP都需要获取用户权限,例如,允许调用位置信息,读取短信,拨打电话,开启WIFI,掉头摄像头等,用户不允许APP获取这些权限的时候.最好的用户体验是,直接跳转到系统设置界面,让用户自己设置. ...

  6. iOS开发——UI篇OC篇&UITableView简单封装

    UITableView简单封装 UITableView时iOS开发中使用最多也是最重的一个UI空间,其实在App Store里面的%80以上的应用都用到了这个控件,所以就给大家介绍一下,前面的文章中也 ...

  7. iOS开发——开发必备OC篇&彩票实战之精华讲解

    彩票实战之精华讲解 在这段时间自己研究并学习关于彩票项目开发的时候遇到各种坑,各种技术点以前或许之前用过但是却用起来不是那么熟悉,所以没遇到一个重点的地方我就会记录一下,希望不会再有下次. 本文主要讲 ...

  8. iOS开发——UI篇OC篇&UITableView多项选择

    UITableView多项选择 自定义cell和取到相应的cell就行了 TableViewCell.h #import <UIKit/UIKit.h> @interface TableV ...

  9. iOS开发——网络实用技术OC篇&网络爬虫-使用青花瓷抓取网络数据

    网络爬虫-使用青花瓷抓取网络数据 由于最近在研究网络爬虫相关技术,刚好看到一篇的的搬了过来! 望谅解..... 写本文的契机主要是前段时间有次用青花瓷抓包有一步忘了,在网上查了半天也没找到写的完整的教 ...

随机推荐

  1. Shell script之if...then

    1 Variable in shell  If you want to print variable, then use echo command. In front of the variable ...

  2. shell脚本操作mysql库

    shell脚本操作mysql数据库-e参数执行各种sql(指定到处编码--default-character-set=utf8 -s,去掉第一行的字段名称信息-N) 2011-05-11 18:18: ...

  3. html5 base64基础

    base64常见的编码形式,二进制文件.图片.视频等     如何弄出来一个base64?     a). FileReader         readAsDataURL();     b). 工具 ...

  4. XE10 Seattle error___seh_personality_v0

    Seattle bcc32c compiler error [ilink32 Error] Error: Unresolved external '___seh_personality_v0' ref ...

  5. <一道题>求1 + 2! + 3! + .... + N!

    一道小题,╮(╯▽╰)╭ #include <stdio.h> /*jie cheng * * 1 + 2! + 3! + ... + N! * * */ int factorial(in ...

  6. CMake编译linux C++

    CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的 ...

  7. ArcObjects10.0引用控件报错

    错误如下:ArcGIS version not specified. You must call RuntimeManager.Bind before creating any ArcGIS comp ...

  8. [原创]Devexpress XtraReports 系列 8 创建Drill-Through报表

    哎,今天公司工作忙了一天,一直没有时间写写东西.所以只能昨天晚上加班写咯.苦逼啊...... 昨天发表了Devexpress XtraReports系列第七篇[原创]Devexpress XtraRe ...

  9. POJ 1039 Pipe(直线和线段相交判断,求交点)

    Pipe Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8280   Accepted: 2483 Description ...

  10. oracle学习 八 分页(使用rownumber)(持续更)

    rownumber是查询的数据集之后加入一个伪列(连续的)使用它可以去制作以oracle数据库为基础的分页,语句类似于公式直接套用如下: select * from (select rownum r, ...