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

UITableView简单封装

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

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

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

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

 1 /**
 2  *  覆盖系统的枚举
 3  */
 4 typedef enum {
 5     CellItemTypeNone,                   // don‘t show any accessory view
 6     CellItemTypeDisclosureIndicator,    // regular chevron. doesn‘t track
 7     CellItemTypeDetailDisclosureButton, // info button w/ chevron. tracks
 8     CellItemTypeCheckmark,              // checkmark. doesn‘t track
 9     CellItemTypeDetailButton NS_ENUM_AVAILABLE_IOS(7_0), // info button. tracks
10
11     CellItemTypeSwitch//扩充
12     /**
13      *  当以后我们使用tableView的时候,如果每个Cell或者Cell的右边有系统Cell存在的控件或者View的时候,我们只要先在这里定义对应的控件或者View
14      */
15
16 }CellItemType;
17
18 @interface iCocosModel : NSObject
19
20
21 //文字标题
22 @property (nonatomic, copy) NSString *title;
23
24 //子标题
25 @property (nonatomic, copy) NSString *subtitle;
26
27 //类名,点击对应的行显示对应类的控制器
28 @property (nonatomic, copy) NSString *className;
29
30 //类型:比如事剪头还是按钮还是Switch活着其他的
31 @property (nonatomic, assign) CellItemType cellItemType;
32
33 /**
34  *  初始化方法
35  */
36 +(id)itemWithTitle:(NSString *)title cellItemType:(CellItemType)cellItemType;

模型数据方法的实现

 1 /**
 2  *  初始化方法
 3  */
 4
 5 +(id)itemWithTitle:(NSString *)title cellItemType:(CellItemType)cellItemType
 6 {
 7     iCocosModel *item = [[iCocosModel alloc] init];
 8     /**
 9      *  转为对应的模型
10      */
11
12     item.title = title;
13
14     item.cellItemType = cellItemType;
15
16
17     //返回每一个项
18     return item;
19
20 }

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

 1 #import "iCocosViewController.h"
 2 /**
 3  *  对应的模型类
 4  */
 5 #import "iCocosModel.h"
 6
 7
 8 @interface iCocosViewController ()
 9 {
10     NSArray *_cellItems;
11 }
12 @end
13
14 @implementation iCocosViewController
15
16
17 //重写这个方法实现分组:改变默认是形式
18 -(id)init
19 {
20     return  [self  initWithStyle:UITableViewStyleGrouped];
21 }
22
23 - (void)viewDidLoad
24 {
25     [super viewDidLoad];
26
27     [self addCellItems];
28 }

这里时最重要的部分:

 1 -(void)addCellItems
 2 {
 3     /**
 4      *  这里就是使用的实现方法,我要添加什么行就先创建行,然后放到_cellitems数组中
 5      */
 6     iCocosModel *note = [iCocosModel itemWithTitle:@"通知设置" cellItemType:CellItemTypeDisclosureIndicator];
 7
 8     iCocosModel *update = [iCocosModel itemWithTitle:@"上传高清图片" cellItemType:CellItemTypeSwitch];
 9     iCocosModel *photo = [iCocosModel itemWithTitle:@"照片水印" cellItemType:CellItemTypeSwitch];
10
11     _cellItems = @[
12                    @[note],
13                    @[update, photo]
14                    ];
15
16 }

代理方法的实现

 1 #pragma mark TableView代理方法
 2
 3 //节数
 4 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
 5 {
 6     //数组的个数,里面可能还有字典
 7     return _cellItems.count;
 8 }
 9
10 //行数
11 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
12 {
13     //数组中每个元素(字典)包含子元素的个数
14     NSArray *array = _cellItems[section];
15     return array.count;
16 }
17 //对应的数据
18 #pragma mark 每当有一个cell进入视野范围内就会调用,返回当前这行显示的cell
19 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
20 {
21     static NSString *ID = @"Cell";
22     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
23     if (cell == nil) {
24         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
25     }
26
27
28     /**
29      *  从模型中取得子元素
30      */
31     iCocosModel *item = _cellItems[indexPath.section][indexPath.row];
32
33     cell.textLabel.text = item.title;
34
35     if (item.cellItemType == CellItemTypeSwitch) {
36         cell.accessoryView = [[UISwitch alloc] init];
37     } else {
38         cell.accessoryType = item.cellItemType;
39     }
40
41     return cell;
42 }
43
44 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
45 {
46
47
48
49 }

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

时间: 2024-10-27 13:00:16

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

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

UIApplication,UIWindow,UIViewController,UIView(layer)简单介绍 一:UIApplication:单例(关于单例后面的文章中会详细介绍,你现在只要知道,单例在应用程序的整个生命周期中只有一个对象). App的启动过程 打开程序之后-> 1:Main函数 2:UIapplicationMain函数 3:初始化UIApplication(创建) 4:设置UIApplication代理和相应的代理属性 5:开启事件循环,监听系统事件 6监测info.p

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

自定义控件之调整按钮中子控件(图片和文字)的位置 其实还有一种是在storyBoard中实现的,只需要设置对应空间的左右间距: 这里实现前面两种自定义的方式 一:imageRectForContentRect/titleRectForContentRect 自定义一个按钮控件在系统自带的位置设置方法中实现对应子控件位置调整 1 /** 2 3 * 设置内部图标的frame 4 5 */ 6 7 - (CGRect)imageRectForContentRect:(CGRect)contentRe

iOS开发——数据持久化OC篇&(三)对象归档

归档 iOS开发UI篇—ios应用数据存储方式(归档)  一.简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置信息) 归档:因为前两者都有一个致命的缺陷,只能存储常用的类型.归档可以实现把自定义的对象存放在文件中. 二.代码示例 1.文件结构 2.代码示例 YYViewController.m文件 1 // 2 // YYViewController.m 3 /

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

iOS的主要框架         阅读目录 Foundation框架为所有的应用程序提供基本系统服务 UIKit框架提供创建基于触摸用户界面的类 Core Data框架管着理应用程序数据模型 Core Graphics框架帮助你创建图形 Core Animation允许你创建高级的动画和虚拟效果 OpenGL ES 框架提供2D和3D绘图工具 将别的框架添加到工程里 本文是<Sunvey the Major Framworks>一文的翻译 框架是一个目录,这个目录包含了共享库,访问共享库里代码

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

网络爬虫-使用青花瓷抓取网络数据 由于最近在研究网络爬虫相关技术,刚好看到一篇的的搬了过来! 望谅解..... 写本文的契机主要是前段时间有次用青花瓷抓包有一步忘了,在网上查了半天也没找到写的完整的教程,于是待问题解决后抽时间截了图,自己写一遍封存在博客园中以便以后随时查阅. charles又名青花瓷,在iOS开发中的抓包中具有重要作用.最大的三点用处,一就是拦截别人软件的发送的请求和后端接口,练习开发.二是自己后端返回的response拦截修改后再接收以达到测试临界数据的作用.三写脚本重复拦截

iOS开发——图形编程OC篇&amp;(一)Quartz 2D介绍

Quartz 2D介绍 一.什么是Quartz2D Quartz 2D是?个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作: 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成PDF 截图\裁剪图片 自定义UI控件 二.Quartz2D在iOS开发中的价值 为了便于搭建美观的UI界面,iOS提供了UIKit框架,??有各种各样的UI控件 UILabel:显?文字 UIImageView:显示图片 UIButton:同时显示图片和?字

iOS开发——网络编程OC篇&amp;(九)数据解析

数据解析 关于iOS开发的中数据解析的方法有两种JSON和XML,这里只做简单的介绍,会使用就可以了. JSON—— 关于JSON的解析经过很多爱好者的分析使用相同自带的还是最好的,不管是从使用的容易度还是性能方面 NSJSONSerialization 1 -(void)start 2 { 3 4 NSString* path = [[NSBundle mainBundle] pathForResource:@"Notes" ofType:@"json"]; 5

iOS开发——网络编程OC篇&amp;(三)数据请求

一.GET请求和POST请求简单说明 创建GET请求 1 // 1.设置请求路径 2 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text]; 3 NSURL *url=[NSURL URLWithString:urlStr]; 4 5 // 2.创建请求对

iOS 开发——版本适配OC篇&amp;项目开发之系统适配问题(关于后台)

项目开发之系统适配问题 关于后台 在之前iOS 开发中,我们精彩遇到关于app适配问题,有屏幕适配,系统适配,但是由于苹果新设备(iphone 6/6p)技新术(sizeClass)的推出在屏幕适配上变的非常简单,而且之前关于app在系统适配上还是比较多的,可能是由于ios7的大改革,后面字啊iOS7盒iOS8上面的api并没有太大的差别,所以关于系统适配,我们并没有考虑太多. 但是,作为一个合格的开发者,不管是实际项目开发中,还是平时我们都要注意系统的视频,毕竟ios9又出来了,虽然常用api

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

网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一片文章已经介绍我们可以使用两个方式来抓取网络数据实现网络爬虫,并且大致介绍了一下怎么使用正则表达式去实现数据的抓取 由于笔者曾经学过一段时间java和android相关的技术,今天就讲讲怎么使用java去抓取网络数据,关于Python有机会等笔者好好研究一下再来分享,但其实会一种就可以,除非你的需求