这是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-最基本的东西)的更多相关文章

  1. iOS深入学习(UITableView系列4:使用xib自定义cell)

    可以通过继承UITableViewCell重新自定义cell,可以像下面一样通过代码来自定义cell,但是手写代码总是很浪费时间, ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  2. iOS深入学习(UITableView系列2:reloadData)

    接着前一篇的博客来深入学习UITableView, UITableView的数据源是NSMutableArray的对象_infoArray,现在数组的内容为{@"Zero",@&q ...

  3. 开源中国iOS客户端学习

    开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客    http://blog.csdn.net/column/details/xfzl-kykhd.html ...

  4. ios网络学习------6 json格式数据的请求处理

    ios网络学习------6 json格式数据的请求处理 分类: IOS2014-06-30 20:33 471人阅读 评论(3) 收藏 举报 #import "MainViewContro ...

  5. ios开发之OC基础-ios开发学习路线图

    本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...

  6. Telegram学习解析系列(二):这我怎么给后台传输数据?

    写在前面: 在iOS开发的过程中,有很多时候我们都在和数据打交道,最基本的就是数据的下载和上传了,估计很多很多的小伙伴都在用AFNetworking与后台数据打交道,可有没有想过,哪天AFNetwor ...

  7. Socket学习总结系列(二) -- CocoaAsyncSocket

    这是系列的第二篇 这是这个系列文章的第二篇,要是没有看第一篇的还是建议看看第一篇,以为这个是接着第一篇梳理的 先大概的总结一下在上篇的文章中说的些内容: 1. 整理了一下做IM我们有那些途径,以及我们 ...

  8. iOS Core Animation 简明系列教程

    iOS Core Animation 简明系列教程  看到无数的CA教程,都非常的难懂,各种事务各种图层关系看的人头大.自己就想用通俗的语言翻译给大家听,尽可能准确表达,如果哪里有问题,请您指出我会尽 ...

  9. MongoDB学习笔记系列

    回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...

  10. Nagios学习实践系列——基本安装篇

    开篇介绍 最近由于工作需要,学习研究了一下Nagios的安装.配置.使用,关于Nagios的介绍,可以参考我上篇随笔Nagios学习实践系列——产品介绍篇 实验环境 操作系统:Red Hat Ente ...

随机推荐

  1. 收缩TempDB的办法(转载)

    有时候在数据库上运行一个数据量很大的查询语句,会导致TempDB数据量剧增,具体查看下面链接文章: SqlServer 一个查询语句导致tempdb增大55G 找到TempDB剧增的问题后,接下来的问 ...

  2. ID3DXMesh接口 创建自己的立方体网格

    D3DXCreateMeshFVF 首先创建一个ID3DXMesh接口. ID3DXMesh接口的说明可以参数龙书. 这里主要是用代码来讲解: #define VERTEX_FVF (D3DFVF_X ...

  3. redis 笔记06 发布与订阅、事务、慢查询日志、监视器

    发布与订阅 1. 服务器状态在pubsub_channels字典保存了所有频道的订阅关系:SUBSCRIBE命令负责将客户端和被订阅的频道关联到这个字典里面,而UNSUBSCRIBE命令则负责 解除客 ...

  4. Javascript 类与静态类的实现-js面向对象

    在Javascript里,对面向对象并没有一个直接的实现,对于代码方面也是非常的灵活. 今天所要说的就是,如何在Javascript里写类与静态类,这是本人一惯用的方法,你也可以有更为方便的,也可以发 ...

  5. scala的apply方法

    package com.test.scala.test /** * apply 方法 */ object ApplyTest { def main(args: Array[String]): Unit ...

  6. Mac OX 隐藏文件夹,文件,应用,磁盘的2种方法 hide finder folder, file, application, volume in 2 ways

    经常需要主目录下隐藏一些文件夹之类的, 第一想到的当然就是:在要隐藏的文件夹前面加『.』(leading dot),这个用法当然可以的了 用习惯了Linux/GNU系统的,基本习惯使用这种办法 但是, ...

  7. Nginx+Keepalived实现 转载

    一.Keepalived简介 keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived的作用是检测web服务 ...

  8. (转载)PERL 处理CSV

    #!/usr/bin/perl#use strict;open(FILE1,"C:/Perl/BX/BX-Users.csv");open(FILE2,"C:/Perl/ ...

  9. unicode转码,如:\u6d4b\u8bd5转成中文“测试”

    public static void main(String[] args) { String s = "测试"; String tt = gbEncoding(s); // St ...

  10. Volley的基本用法

    1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行H ...