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的代理方法。

时间: 2024-10-10 05:31:14

iOS深入学习(UITableView:系列1-最基本的东西)的相关文章

IOS UI学习 UITableView Demo 实现类似QQ联系人收起和展开效果

UItableView 日常学习总结 实现类似 QQ联系人收起和展开的效果 思路 就是 自定义Header 在它上面添加一个Button 或者一个点击手势 ,我是添加了一个手势 每一个分区设置一个状态为表示为收起和展开  (bool 型 即可) 当判断为收起时将分区 section的row数量设置为0,即不显示任何内容 当判断为展开时将分区 section的row数量设置为要显示的内容的数目 然后重载分区即可 重载分区方法 1 //重载分区 2 [_tableV reloadSections:[

IOS UI学习 UITableView ----- UITableViewDataSource

UITableView派生自UIScrollView UITableView结构如下: 背景是滚动视图,每个横向的表格称为cell ( UITableViewCell ) 每一个 cell 既可以存储数据,也可以接受选中的事件, 我们选中某个cell时,可以下拉列表,可以推出新的页面 在编辑模式选中多个cell,可以批量删除等. 成员变量 1 { 2 UITableView * _tableV; 3 NSMutableArray * _dataArr; 4 UISearchController

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

可以通过继承UITableViewCell重新自定义cell,可以像下面一样通过代码来自定义cell,但是手写代码总是很浪费时间, ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 //CustomTableViewCell.h文件 @interface CustomTableViewCell:UITableViewCell @property (nonat

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

接着前一篇的博客来深入学习UITableView, UITableView的数据源是NSMutableArray的对象_infoArray,现在数组的内容为{@"Zero",@"One",@"Two",@"Three",@"Four"},如果数组的内容增加了,该怎样刷新UITableView界面的内容呢?答案是通过reloadData方法,下面我就来模拟一个场景,点击导航栏右侧的ButtonItem,向可变

开源中国iOS客户端学习

开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客    http://blog.csdn.net/column/details/xfzl-kykhd.html 开源中国iOS客户端学习——序 说到这款开源软件就得提到她的娘家了--开源中国社区: 开源中国社区简介:开源中国 www.oschina.net 成立于2008年8月,是目前中国最大的开源技术社区.传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现.使用.并交流开源技术的平台.目前开源中国社区已收

【iOS知识学习】_iOS动态改变TableView Cell高度

在做tableView的时候,我们有时候需要根据cell的高度动态来调整,最近在网上看到一段代码不错,跟大家Share一下. 在 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 类中获取cell的高度: CGSize boundSize = CGSizeMake(216, CGFLOAT_MAX); cell.textLabel.text

iOS Core Animation 简明系列教程

iOS Core Animation 简明系列教程  看到无数的CA教程,都非常的难懂,各种事务各种图层关系看的人头大.自己就想用通俗的语言翻译给大家听,尽可能准确表达,如果哪里有问题,请您指出我会尽快修改. 1.什么是Core Animation? 它是一套包含图形绘制,投影,动画的OC类集合.它就是一个framework.通过CoreAnimation提供的接口,你可以方便完成自己所想要的动画. 2.我眼中的Core Animation? 动画和拍电影一样,而我们就如同导演一样,全权负责这场

iOS开发之UITableView全面解析

在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似于微信.QQ.新浪微博等软件基本上随处都是UITableView.当然它的广泛使用自然离不开它强大的功能,今天这篇文章将针对UITableView重点展开讨论.今天的主要内容包括: 1.基本介绍 2.数据源 3.代理 4.性能优化 5.UITableViewCell 6.常用操作 7.UITableViewController 8.MVC模式   基本介绍 UITableView有两种风

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

写在前面: 在iOS开发的过程中,有很多时候我们都在和数据打交道,最基本的就是数据的下载和上传了,估计很多很多的小伙伴都在用AFNetworking与后台数据打交道,可有没有想过,哪天AFNetworking你不能用了或者不会用了怎么办?可能你心中疑惑了,这三方只要更新,存在怎么会不能用或者我怎么会不会用了,在没有看Telegram源码之前,我也是这么想的,看了Telegram源码就不会再这么想了,以后我会把自己看的Telegram源码部分的总结和经验一点点的整理分享出来,整理成这个Telegr

ios网络学习------7 xml格式数据的请求处理

用NSXMLParser解析XML文件过程: 1 创建NSXMLParser实例,并传入从服务器接收XML数据. 2 定义解析器代理 3 解析器解析. 4 通过解析代理方法完成XML数据的解析. #pragma mark 加载xml - (void)loadXML { //获取网络数据. NSLog(@"load xml"); //从web服务器加载数据 NSString *str = @"http://www.baidu.com?format=xml"; //这里