UITableView简单封装

UITableView时iOS开发中使用最多也是最重的一个UI空间,其实在App Store里面的%80以上的应用都用到了这个控件,所以就给大家介绍一下,前面的文章中也提到了,在后面的文章中将会详细解释。

当然这篇文档并不是介绍证明去使用它,只是说说怎么去封装活着更好的使用。

这里主要是关于UItableView中Cell中的多功能实现

一:新建一个模型数据,用于Cell的实现

 /**
  *  覆盖系统的枚举
  */
 typedef enum {
     CellItemTypeNone,                   // don't show any accessory view
     CellItemTypeDisclosureIndicator,    // regular chevron. doesn't track
     CellItemTypeDetailDisclosureButton, // info button w/ chevron. tracks
     CellItemTypeCheckmark,              // checkmark. doesn't track
     CellItemTypeDetailButton NS_ENUM_AVAILABLE_IOS(7_0), // info button. tracks

     CellItemTypeSwitch//扩充
     /**
      *  当以后我们使用tableView的时候,如果每个Cell或者Cell的右边有系统Cell存在的控件或者View的时候,我们只要先在这里定义对应的控件或者View
      */

 }CellItemType;

 @interface iCocosModel : NSObject

 //文字标题
 @property (nonatomic, copy) NSString *title;

 //子标题
 @property (nonatomic, copy) NSString *subtitle;

 //类名,点击对应的行显示对应类的控制器
 @property (nonatomic, copy) NSString *className;

 //类型:比如事剪头还是按钮还是Switch活着其他的
 @property (nonatomic, assign) CellItemType cellItemType;

 /**
  *  初始化方法
  */
 +(id)itemWithTitle:(NSString *)title cellItemType:(CellItemType)cellItemType;

模型数据方法的实现

 /**
  *  初始化方法
  */

 +(id)itemWithTitle:(NSString *)title cellItemType:(CellItemType)cellItemType
 {
     iCocosModel *item = [[iCocosModel alloc] init];
     /**
      *  转为对应的模型
      */

     item.title = title;

     item.cellItemType = cellItemType;

     //返回每一个项
     return item;

 }

完成了这一步,我们使用起来就非常简单了。

 #import "iCocosViewController.h"
 /**
  *  对应的模型类
  */
 #import "iCocosModel.h"

 @interface iCocosViewController ()
 {
     NSArray *_cellItems;
 }
 @end

 @implementation iCocosViewController

 //重写这个方法实现分组:改变默认是形式
 -(id)init
 {
     return  [self  initWithStyle:UITableViewStyleGrouped];
 }

 - (void)viewDidLoad
 {
     [super viewDidLoad];

     [self addCellItems];
 }

这里时最重要的部分:

 -(void)addCellItems
 {
     /**
      *  这里就是使用的实现方法,我要添加什么行就先创建行,然后放到_cellitems数组中
      */
     iCocosModel *note = [iCocosModel itemWithTitle:@"通知设置" cellItemType:CellItemTypeDisclosureIndicator];

     iCocosModel *update = [iCocosModel itemWithTitle:@"上传高清图片" cellItemType:CellItemTypeSwitch];
     iCocosModel *photo = [iCocosModel itemWithTitle:@"照片水印" cellItemType:CellItemTypeSwitch];

     _cellItems = @[
                    @[note],
                    @[update, photo]
                    ];

 }

代理方法的实现

 #pragma mark TableView代理方法

 //节数
 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
 {
     //数组的个数,里面可能还有字典
     return _cellItems.count;
 }

 //行数
 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
     //数组中每个元素(字典)包含子元素的个数
     NSArray *array = _cellItems[section];
     return array.count;
 }
 //对应的数据
 #pragma mark 每当有一个cell进入视野范围内就会调用,返回当前这行显示的cell
 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
     static NSString *ID = @"Cell";
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
     if (cell == nil) {
         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
     }

     /**
      *  从模型中取得子元素
      */
     iCocosModel *item = _cellItems[indexPath.section][indexPath.row];

     cell.textLabel.text = item.title;

     if (item.cellItemType == CellItemTypeSwitch) {
         cell.accessoryView = [[UISwitch alloc] init];
     } else {
         cell.accessoryType = item.cellItemType;
     }

     return cell;
 }

 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 {

 }

如果你到了这一步说明你已经成功了,当然步骤是死的,人是活的,你也可以实现更加复杂活着实用的功能,在后面的文章我将会对他进行更加深入的封装,最后不管到了那里都可拿来用,这才是一个真正的开发者,不是吗!

 

iOS开发——UI篇OC篇&UITableView简单封装的更多相关文章

  1. iOS开发——UI精选OC篇&UIApplication,UIWindow,UIViewController,UIView(layer)简单介绍

    UIApplication,UIWindow,UIViewController,UIView(layer)简单介绍 一:UIApplication:单例(关于单例后面的文章中会详细介绍,你现在只要知道 ...

  2. iOS开发——UI高级OC篇&自定义控件之调整按钮中子控件(图片和文字)的位置

    自定义控件之调整按钮中子控件(图片和文字)的位置 其实还有一种是在storyBoard中实现的,只需要设置对应空间的左右间距: 这里实现前面两种自定义的方式 一:imageRectForContent ...

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

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

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

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

  5. iOS开发——高级技术OC篇&运行时(Runtime)机制

    运行时(Runtime)机制 本文将会以笔者个人的小小研究为例总结一下关于iOS开发中运行时的使用和常用方法的介绍,关于跟多运行时相关技术请查看笔者之前写的运行时高级用法及相关语法或者查看响应官方文档 ...

  6. iOS开发——网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据

    网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...

  7. iOS开发——运行时OC篇&使用运行时获取系统的属性:使用自己的手势修改系统自带的手势

    使用运行时获取系统的属性:使用自己的手势修改系统自带的手势 有的时候我需要实现一个功能,但是没有想到很好的方法或者想到了方法只是那个方法实现起来太麻烦,一或者确实为了装逼,我们就会想到iOS开发中最牛 ...

  8. iOS开发——网络编程OC篇&(一)XMPP简单介绍与准备

    XMPP简单介绍与准备 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈 ...

  9. iOS开发——使用技术OC篇&简单九宫格锁屏功能的实现与封装

    简单九宫格锁屏功能的实现与封装 首先来看看最后的实现界面. 在这开始看下面的内容之前希望你能先大概思考活着回顾一下如果 你会怎么做,只要知道大概的思路就可以. 由于iphone5指纹解锁的实现是的这个 ...

  10. iOS开发——新特性OC篇&IOS9 SDK新特性

    iOS9 SDK新特性 WWDC 2015苹果开发者大会是移动开发者一年一度的盛会,InfoQ中文站除了第一时间整理Keynote内容分享给大家之外,还邀请了资深的一线开发者分享他们的收获.本文为王巍 ...

随机推荐

  1. hdu 3948(后缀数组+RMQ)

    题意:求一个串中有多少不同的回文串. 分析:这一题的关键是如何去重,我表示我现在还没理解为什么这样去重,先放这里过两天再看!! //不同回文子串数目 #include <iostream> ...

  2. 从windows转向mac

    键盘问题: 按键对应表 Windows Mac ctrl command alt option 由此可推断,windows下的ctrl+c/v 变成了mac下的 command+c/v 功能对应表 删 ...

  3. css3 javascript 实现菜单按钮特效

    一个菜单按钮特效案例,简单的实现了动态效果. 代码效果预览地址: http://code.w3ctech.com/detail/2504 <div class="bar" i ...

  4. 数据库(class0507)

    局部变量_先声明再赋值 声明局部变量 DECLARE @变量名 数据类型 DECLARE @name varchar(20) DECLARE @id int 赋值 SET @变量名 =值 --set用 ...

  5. 常用的正则表达式归纳—JavaScript正则表达式

    来源:http://www.ido321.com/856.html 1.正则优先级 首先看一下正则表达式的优先级,下表从最高优先级到最低优先级列出各种正则表达式操作符的优先权顺序: 2.常用的正则表达 ...

  6. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇05:角色中弹》

    5.角色中弹 概述: 为了使游戏具有挑战性,大部分游戏设定中,游戏角色都有生命限制.即在游戏中,由于玩家的操控操控不当,导致游戏角色死亡游戏终止.打飞机游戏也不例外,当敌人击中角色的时候,角色宣判死亡 ...

  7. Static块详解

    首先,我们先看一段程序,代码如下: public class Father { public Father() //构造方法 { System.out.println(" 父类构造方法&qu ...

  8. RabbitMQ 入门 Helloworld -摘自网络

    本系列教程主要来自于官网入门教程的翻译,然后自己进行了部分的修改与实验,内容仅供参考. “Hello world” of RabbitMQ 1.Windows下RabbitMQ的安装 下载Erlang ...

  9. -exec 与 xargs 的区别

    实地在shell里执行下如下命令就知道区别了: $ find -type f -exec echo {} \; 很明显,exec是对每个找到的文件执行一次命令.从这里可以看出exec的缺点是每处理一个 ...

  10. Apache Spark Streaming的优点

    Apache Spark Streaming的优点: (1)优势及特点 1)多范式数据分析管道:能和 Spark 生态系统其他组件融合,实现交互查询和机器学习等多范式组合处理. 2)扩展性:可以运行在 ...