iOS深入学习(UITableView:系列1-最基本的东西)
这是UITableView博客系列的第一篇,使用xib和arc编码,主要讲解一些UITableView使用过程中简单的、但是又容易被忽略的东西,而且我会告诉读者,怎样在使用了之后就再也不会忘记。
操作的步骤如下,
(1)首先拖一个UITableView控件到xib文件上面,如下图,

这没有什么,大家不要太过于害怕UITableView,它只是一个UI控件,跟UIButton和UILabel没什么不一样,可以随意的拖拉。
(2)接下来我们在对应的xxxViewController中实例化这个UITableView对象,这里有一个小技巧需要说明一下,先点击xxxViewController.xib文件,这时候Xcode中显示的就是xib文件的内容,这时候双击xxxViewController.h文件,这时候在小窗口中打开了.h文件,这样就方便了下面的操作。
在xxxViewController.xib文件中点,击TableView,点击鼠标右键,将其拖动到小窗口的xxxViewController.h文件中,如下图,

(3)释放鼠标,这时候会弹出下面的界面,

这里我将UITableView对象命名为theTableView,你可以将其命名为任意的名字,这只是一个变量名称,任意你修改。点击Connect按钮,这样Xcode自动帮我们在xxxViewController.h文件中生成了property声明,
|
1
|
@property (nonatomic, strong) IBOutlet UITableView *theTableView; |
这就是使用xib的好处,节省了很多代码,不是吗?
(4)这一步骤很重要,设置theTableView的delegate和dataSource为self,在xxxViewController.xib文件中,右键拖动鼠标指向File's Owner,如下图,

接着会弹出下面的界面,

先点击dataSource,再重复上面的操作,然后点击delegate。这样的界面操作,相当于执行了self.theTableView.delegate = self;和self.theTableView.dataSource = self;语句。我还是要提醒一下,要两次右键拖动UITableView指向File's Owner,分别设置dataSource和delegate,顺序随便。
(5)上面都是通过xib来设置界面的,这样省去了不少代码,我截图说明了操作的过程。好了,xib拖动基本就是这么多内容,下面是代码实现的细节。
在xxxViewController.m文件中,实现UITableViewControllerDelegate和UITableViewControllerDataSource协议,并且定义一个NSMutableArray实例变量instance variable,命名为_infoArray,
|
1
2
3
4
5
|
@interface xxxViewController()<UITableViewDelegate,UITableViewDataSource>{ NSMutableArray *_infoArray;}@end |
在-viewDidLoad中初始化_infoArray数组内容,
|
1
2
3
4
5
|
- (void)viewDidLoad{ [super viewDidLoad]; _infoArray = [[NSMutableArray alloc] initWithObjects:@"Zero",@"One",@"Two",@"Three",@"Four", nil];} |
好了,这个步骤就是设置theTableView的数据源,有人会问数据源是什么,简单来说数据源就是这个theTableView控件要显示的内容,就像label.text = @"Label内容";,其中@"label内容"字符串就是label控件的数据源。所以我们可以看到,UITableView是完美的使用了MVC设计模式来实现的,其中xxxViewController担任控制者的角色,theTableView是视图,而这里的_infoArray是数据源,实际上这里的_infoArray并不是完整的数据模型,还可以进行更高层次的抽象。
(6)上面我们服从了UITalbeViewDelegate和UITableViewDataSource协议,那么我们就需要在xxxViewController中区实现协议中的代理方法,那么有读者会问,UITableView有那么多的代理方法,我总是记不清楚,这里我将告诉你怎么记得清楚,以后也不会遗忘。
在所有的UITableView代理方法中,返回列表行数(NSInteger)和设置列表内容(UITableViewCell *)是必不可少的两个代理方法,这两个方法的返回值分别是NSInteger和UITableViewCell *内容,所以我们只需要记住返回值,然后Xcode就会自动提示我们需要选择哪个方法,
例如我想实现返回列表行数的方法,这时候只需要输入- (NSInteger)tableView,这时候Xcode会提示我们很多的方法,如下图所示,

这时候我选择第二个numberOfRowsInSection:(NSInteger)section方法,然后在里面返回_infoArray的数组个数,如下代码所示,
|
1
2
3
4
|
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return [_infoArray count];} |
这样就设置了返回的行数。
接下来我要设置列表显示的内容,我们知道它的返回值为UITableViewCell *类型,所以我直接这样写,- (UITableViewCell *)tableView,Xcode自动提示我完整的代理方法,如下图所示,

很幸运,返回UITableViewCell *内容的方法只有一个,我不用选择直接按Enter按键就可以了,接着我来实现cellForRowAtIndexPath:(NSIndexPath *)indexPath方法,填充里面的内容,如下代码,
|
1
2
3
4
5
6
7
8
9
10
11
|
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *simpleIdentify = @"SimpleIdentify"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleIdentify]; if(cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleIdentify]; } cell.textLabel.text = [_infoArray objectAtIndex:indexPath.row]; return cell;} |
上面的代码全都是我手写输入的,因为我已经记得滚瓜烂熟了,算是孰能生巧吧,所以iOS开发,对于一些关键代码,为了不重复查阅资料,还是要用心记下来的。那么怎样记忆上面简单但是又容易遗忘的代码呢?我来说说我的记忆过程吧,首先static NSString *simpleIdentify = @"SimpleIdentify";是设置UITableViewCell的重用标识符,我们知道UITableView的重用机制比较牛逼的技术,这个以后我会写博客来说明的,这里不再多说。接下来我输入代码UITableViewCell *cell = [tableView de];这时候Xcode会自动提示方法列表,如下图,

记住,这里请选择第一个dequeueReusableCellWithIdentifier方法,该方法只有一个NSString *参数,我之前很多次选择了第二个方法,然后程序莫名其妙地cursh了。
接着通过if(cell == nil){}来判断cell是否为空,如果cell为空,则实例化cell对象,代码是cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleIdentify];
然后通过cell.textLabel.text = [_infoArray objectAtIndex:indexPath.row];来设置cell显示的数据源中对应函数的内容,最后通过return cell;返回cell内容。
写完这些代码,我们运行程序,效果图如下,

好了,这就是UITableView的系列一教程,主要是说明通过xib编码,有哪些关键的步骤;还有几十怎样快速记住UITableView的代理方法。
iOS深入学习(UITableView:系列1-最基本的东西)的更多相关文章
- iOS深入学习(UITableView系列4:使用xib自定义cell)
可以通过继承UITableViewCell重新自定义cell,可以像下面一样通过代码来自定义cell,但是手写代码总是很浪费时间, ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- iOS深入学习(UITableView系列2:reloadData)
接着前一篇的博客来深入学习UITableView, UITableView的数据源是NSMutableArray的对象_infoArray,现在数组的内容为{@"Zero",@&q ...
- 开源中国iOS客户端学习
开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客 http://blog.csdn.net/column/details/xfzl-kykhd.html ...
- ios网络学习------6 json格式数据的请求处理
ios网络学习------6 json格式数据的请求处理 分类: IOS2014-06-30 20:33 471人阅读 评论(3) 收藏 举报 #import "MainViewContro ...
- ios开发之OC基础-ios开发学习路线图
本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...
- Telegram学习解析系列(二):这我怎么给后台传输数据?
写在前面: 在iOS开发的过程中,有很多时候我们都在和数据打交道,最基本的就是数据的下载和上传了,估计很多很多的小伙伴都在用AFNetworking与后台数据打交道,可有没有想过,哪天AFNetwor ...
- Socket学习总结系列(二) -- CocoaAsyncSocket
这是系列的第二篇 这是这个系列文章的第二篇,要是没有看第一篇的还是建议看看第一篇,以为这个是接着第一篇梳理的 先大概的总结一下在上篇的文章中说的些内容: 1. 整理了一下做IM我们有那些途径,以及我们 ...
- iOS Core Animation 简明系列教程
iOS Core Animation 简明系列教程 看到无数的CA教程,都非常的难懂,各种事务各种图层关系看的人头大.自己就想用通俗的语言翻译给大家听,尽可能准确表达,如果哪里有问题,请您指出我会尽 ...
- MongoDB学习笔记系列
回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...
- Nagios学习实践系列——基本安装篇
开篇介绍 最近由于工作需要,学习研究了一下Nagios的安装.配置.使用,关于Nagios的介绍,可以参考我上篇随笔Nagios学习实践系列——产品介绍篇 实验环境 操作系统:Red Hat Ente ...
随机推荐
- opencv的一次性配置
最近做自然场景中的文字识别,想尝试些图像处理方法,感觉每一种方法都需要自己写很麻烦,自然就想到了强大的开源的跨平台计算机视觉库OpenCv.我用的是opencv2.4.9版本,VS用的是2010,他们 ...
- C语言初学者代码中的常见错误与瑕疵(19)
见:C语言初学者代码中的常见错误与瑕疵(19)
- :first // :last
描述: 获取匹配的第一个元素 HTML 代码: <ul> <li>list item 1</li> <li>list item 2</li> ...
- linux设备驱动归纳总结(七):1.时间管理与内核延时【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-100005.html linux设备驱动归纳总结(七):1.时间管理与内核延时 xxxxxxxxxxx ...
- android 开发中的常见问题
Android studio 使用极光推送, 显示获取sdk版本失败 在 build.gradle(Module.app) 添加 android { sourceSets.main { ...
- Hosting custom WPF calendar control in AX 2012
原作者: https://community.dynamics.com/ax/b/axilicious/archive/2013/05/20/hosting-custom-wpf-calendar-c ...
- 【JQGRID DOCUMENTATION】.学习笔记.5.Form Editing
JqGrid支持为view ,add, edit,delete, search创建一个on the fly的form.这使得Modal Boxes和行内编辑能够在程序用结合.毕竟,行内编辑只能用在已经 ...
- React Native 开发笔记
ReactNativeDemo 学习ReactNative开发,搭建ReactNative第一个项目 React Native 开发笔记 1.安装Homebrew $ /usr/bin/ruby -e ...
- ImageLoader 图片加裁
// String picurl = article.cateLogo;// ImageLoader.getInstance().displayImage(picurl, holder.cate_Lo ...
- php中的curl】php中curl的详细解说
本文我来给大家详细介绍下cURL的简单的使用方法,下文我将会给大家详细介绍cURL的高级应用, cURL可以使用URL的语法模拟浏览器来传输数据, FTP, FTPS, HTTP, HTTPS, GO ...