iOS开发——UI篇OC篇&UITableView简单封装
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简单封装的更多相关文章
- iOS开发——UI精选OC篇&UIApplication,UIWindow,UIViewController,UIView(layer)简单介绍
UIApplication,UIWindow,UIViewController,UIView(layer)简单介绍 一:UIApplication:单例(关于单例后面的文章中会详细介绍,你现在只要知道 ...
- iOS开发——UI高级OC篇&自定义控件之调整按钮中子控件(图片和文字)的位置
自定义控件之调整按钮中子控件(图片和文字)的位置 其实还有一种是在storyBoard中实现的,只需要设置对应空间的左右间距: 这里实现前面两种自定义的方式 一:imageRectForContent ...
- iOS开发——网络实用技术OC篇&网络爬虫-使用青花瓷抓取网络数据
网络爬虫-使用青花瓷抓取网络数据 由于最近在研究网络爬虫相关技术,刚好看到一篇的的搬了过来! 望谅解..... 写本文的契机主要是前段时间有次用青花瓷抓包有一步忘了,在网上查了半天也没找到写的完整的教 ...
- ios开发——实用技术篇OC篇&iOS的主要框架
iOS的主要框架 阅读目录 Foundation框架为所有的应用程序提供基本系统服务 UIKit框架提供创建基于触摸用户界面的类 Core Data框架管着理应用程序数据模型 Core ...
- iOS开发——高级技术OC篇&运行时(Runtime)机制
运行时(Runtime)机制 本文将会以笔者个人的小小研究为例总结一下关于iOS开发中运行时的使用和常用方法的介绍,关于跟多运行时相关技术请查看笔者之前写的运行时高级用法及相关语法或者查看响应官方文档 ...
- iOS开发——网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据
网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...
- iOS开发——运行时OC篇&使用运行时获取系统的属性:使用自己的手势修改系统自带的手势
使用运行时获取系统的属性:使用自己的手势修改系统自带的手势 有的时候我需要实现一个功能,但是没有想到很好的方法或者想到了方法只是那个方法实现起来太麻烦,一或者确实为了装逼,我们就会想到iOS开发中最牛 ...
- iOS开发——网络编程OC篇&(一)XMPP简单介绍与准备
XMPP简单介绍与准备 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈 ...
- iOS开发——使用技术OC篇&简单九宫格锁屏功能的实现与封装
简单九宫格锁屏功能的实现与封装 首先来看看最后的实现界面. 在这开始看下面的内容之前希望你能先大概思考活着回顾一下如果 你会怎么做,只要知道大概的思路就可以. 由于iphone5指纹解锁的实现是的这个 ...
- iOS开发——新特性OC篇&IOS9 SDK新特性
iOS9 SDK新特性 WWDC 2015苹果开发者大会是移动开发者一年一度的盛会,InfoQ中文站除了第一时间整理Keynote内容分享给大家之外,还邀请了资深的一线开发者分享他们的收获.本文为王巍 ...
随机推荐
- PagerSlidingTabStrip 高亮选中标题
1.选中标题后,高亮标题@Override public void onPageSelected(int position) { setSelectTextColor(position); if (d ...
- JVM 性能调优实战之:使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码
本文是<JVM 性能调优实战之:一次系统性能瓶颈的寻找过程> 的后续篇,该篇介绍了如何使用 JDK 自身提供的工具进行 JVM 调优将 TPS 由 2.5 提升到 20 (提升了 7 倍) ...
- gradle 学习
gradle是个构建工具,目的是为了更方便的管理项目. 学习gradle看下面的资料: 中文资料,总共六篇,看完之后基础差不多了: 简介 第一个Java项目 依赖管理 创建二进制发布版本 创建多项目构 ...
- bzoj 1001: [BeiJing2006]狼抓兔子 平面图最小割
平面图跑最大流 可以转换为其对偶图跑最短路 一个环对应一个割 找到最小环(即最短路)极为所求,注意辅助边的建立 加入读入优化 不过时间还是一般 估计是dij写的不好 大神勿喷~~~ /*** ...
- 在word中显示漂亮的代码
在word中粘贴或写代码时,通常得不到想要的格式,可用‘Notepad++’工具实现. 步骤: (1)安装Notepad++软件,把代码粘贴进去,选择菜单栏中的语言,然后选择相应代码语言,如P-> ...
- linux常用命令之--文件打包与压缩命令
linux的文件打包与压缩命令 1.压缩与解压命令 compress:用于压缩指定的文件,后缀为.z 其命令格式如下: compress [-d] 文件名 常用参数: -d:解压被压缩的文件(.z为后 ...
- JavaScript UI技术选型
ExtJS l ExtJS(TODO:找旧版本,类似现在EasyUI插件的旧版本)简介:纯JS支持:IE6授权:GPLv3授权.商业授权($329/人) l Ext.NET简介:ExtJS的NET封装 ...
- nodejs API笔记
一.URL 涉及到的方法 1.parse():解析地址 2.format():生成地址 3.resolve(from,to):组合成地址 举例说明: url.parse('http://baidu.c ...
- jsp文件上传、下载
一.文件上传 上传文件是Web开发中经常要用到的功能:例如在基于B/S的人事信息管理系统中上传照片,在新闻发布系统中上传图片等等.....要实现文件上传功能,就需要综合利用java中的文件输入和输出相 ...
- 关于ORACLE的硬解析和软解析与MySQL的查询缓存query_cache探讨
今天在项目中探讨到Oracle对于SQL语句的解析方法以及MySQL相应的处理方法: --------------------------------------------------------- ...