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. java web 学习二(Tomcat服务器学习和使用1)

    一.Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件. 如果想修改Tomcat服务器的启动端口,则可以在server.xml ...

  2. java 使用相对路径读取文件

    java 使用相对路径读取文件 1.java project环境,使用java.io用相对路径读取文件的例子: *目录结构:  DecisionTree            |___src      ...

  3. 设置layoutControl1 中的 控件的 focus

    设置 layoutControl1 中的layoutControl EnableAutoTabOrder 为 false; this.layoutControl1.ActiveControl = th ...

  4. PHP 系统命令函数

    function execute($cmd) { $res = ''; if ($cmd) { if(function_exists('system')) { @ob_start(); @system ...

  5. Bias/variance tradeoff

    线性回归中有欠拟合与过拟合,例如下图: 则会形成欠拟合, 则会形成过拟合. 尽管五次多项式会精确的预测训练集中的样本点,但在预测训练集中没有的数据,则不能很好的预测,也就是说有较大的泛化误差,上面的右 ...

  6. Tkinter教程之Scrollbar篇

    本文转载自:http://blog.csdn.net/jcodeer/article/details/1811319 '''Tkinter教程之Scrollbar篇'''#Scrollbar(滚动条) ...

  7. 机器学习----分布问题(二元,多元变量分布,Beta,Dir)

    这涉及到数学的概率问题. 二元变量分布:          伯努利分布,就是0-1分布(比如一次抛硬币,正面朝上概率) 那么一次抛硬币的概率分布如下: 假设训练数据如下: 那么根据最大似然估计(MLE ...

  8. 解开发者之痛:中国移动MySQL数据库优化最佳实践(转)

    开源数据库MySQL比较容易碰到性能瓶颈,为此经常需要对MySQL数据库进行优化,而MySQL数据库优化需要运维DBA与相关开发共同参与,其中MySQL参数及服务器配置优化主要由运维DBA完成,开发则 ...

  9. mysql注册服务

    http://www.2cto.com/database/201301/185456.html ____________________________________________________ ...

  10. HTML5每日一练之input新增加的URL类型与email类型应用

    1.URL类型: <form> <input name="urls" type="url" value="http://www.w3 ...