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内容分享给大家之外,还邀请了资深的一线开发者分享他们的收获.本文为王巍 ...
随机推荐
- [Everyday Mathematics]20150113
设 $f\in C^2(0,+\infty)$ 适合 $$\bex \lim_{x\to 0^+}f'(x)=-\infty,\quad \lim_{x\to 0^+}f''(x)=+\infty. ...
- 在Ubuntu下卸载Apache
卸载Apache 转自:http://blog.csdn.net/chmo2011/article/details/7026384 1. 删除apache 代码: $ sudo apt-get --p ...
- HDU 3695-Computer Virus on Planet Pandora(ac自动机)
题意: 给一个母串和多个模式串,求模式串在母串后翻转后的母串出现次数的的总和. 分析: 模板题 /*#include <cstdio> #include <cstring> # ...
- 【LeetCode 231】Power of Two
Given an integer, write a function to determine if it is a power of two. 思路: 如果一个数是2的Power,那么该数的二进制串 ...
- 使用calabash测试开源中国Android客户端
Calabash-android是支持android的UI自动化测试框架,前面已经介绍过<中文Win7下成功安装calabash-android步骤>,这篇博文尝试测试一个真实应用:开源中 ...
- Android FragmentActivity+viewpager的使用
使用场景,打算设计一个“底部菜单栏+其余可滑动的页面”的简单的功能. package com.lanyuweng.mibaby; import android.content.Intent; impo ...
- Robotium简要学习
Robotium是一款国外的Android自动化测试框架,主要针对Android平台的应用进行黑盒自动化测试,它提供了模拟各种手势操作(点击.长按.滑动等).查找和断言机制的API,能够对各种控件进行 ...
- Tkinter教程之Pack篇
本文转载自:http://blog.csdn.net/jcodeer/article/details/1813077 '''Tkinter教程之Pack篇'''#Pack为一布局管理器,可将它视为一个 ...
- java 复习003
今天主要复习下数据结构的东西 树 自平衡二叉查找树 AVL树(高平衡树)(wiki) 特性:任何节点的两个子树的高度最大差别为一 时间复杂度:查找.插入和删除在平均和最坏情况下都是O(log n) 红 ...
- 12306验证图片的bug
刚才有人告诉我12306验证码换了,于是我就打开了看了看,点了点.oh no , i am really sorry ,12306.