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 ...
随机推荐
- AR 应收 表
AR 应收 应收事务处理相关表 SELECT * FROM ar.ar_batches_all; --事务处理批 SELECT * FROM ar.ra_custom ...
- Spring容器中的Bean
一,配置合作者的Bean Bean设置的属性值是容器中的另一个Bean实力,使用<ref.../>元素,可制定一个bean属性,该属性用于指定容器中其他Bean实例的id属性 <be ...
- 在centos中编译putty时提示找不到gtk库的解决办法
明明已经安过gtk了, 后来在csdn上发现了前人的解决办法 yum install libgnomeui-devel 现在编译出来的putty就可以有图形界面了
- RobotFramework 安装配置(一)
服务器接口的测试框架的选择,最后选中了 RobotFramework ,原因一:能有效的管理测试用例,,支持批量执行,能实现关键字驱动或者数据驱动.原因二:支持测试人员可以使用Python和java创 ...
- session_start()一些问题
session问题集锦 对于PHP的session功能,始终找不到合适的答案,尤其是一些错误,还有一些没有错误的结果,最可怕的就是后者,一直为许多的初学者为难.就连有些老手,有时都被搞得莫名其妙.本文 ...
- fedora环境安装webkit支持作爬虫下载解析JS
环境: 我使用的fedora19.1-xfce版本,属于redhat系的桌面环境. 1.安装 webkit源码安装webkit失败,这里提供的是yum安装方式. a.查看当前yum库中的webkit资 ...
- shell 加减乘除
#!/bin/basha=$1b=$2echo a+b=$(($a+$b))echo a-b=$(($a-$b))echo a*b=$(($a*$b))echo a/b=$(($a/$b))echo ...
- json_decode和json_encode
JSON出错:Cannot use object of type stdClass as array解决方法php再调用json_decode从字符串对象生成json对象时,如果使用[]操作符取数据, ...
- yum源的修改
源路径: /etc/yum.repos.d/ 配置文件: 网络搜索 CentOS-Base.repo(默认) 设备搜索 CentOS-Media.repo 将CentOS-Base.repo移除或改名 ...
- bootstrap导航条在手机上默认展开二级目录,必须用setTimeout才能实现
bootstrap导航条在手机上默认展开二级目录,必须用setTimeout才能实现 $(document).ready(function() { $('.dropdown').hover(funct ...