您的位置:首页 > 产品设计 > UI/UE

iphone开发之表格组件UITableView的使用(一)使用时的具体步骤介绍

2015-08-30 09:54 561 查看
1、必须掌握的知识点

(1)设置UITableView的dataSource、delegate。

(2)UITableView多组数据和单组数据的展示。

(3)UITableViewCell的常见属性。

(4)UITableVIew的性能优化(cell的循环利用)。

(5)自定义cell。(很重要)

2、UITableView只有一列。

(1)在IOS中,要实现表格数据展示,最常用的做法就是使用UITableVIew.

(2)UITableView继承自UIScrollView,因此支持垂直滚动,而且性能极佳。

3、UITableView的两种样式:

(1)UITableViewStylePlain 单条数据显示

(2)UITableViewStyleGrouped 分组数据显示

4、UITableView如何展示数据:

(1)UItableView需要一个数据源(dataSource)来显示数据。

(2)UITableView会向数据源查询一共有多少行数据以及每一行显示什么数据等。

(3)没有设置数据源的UItableView只是个空壳。

(4)凡是遵守UItableViewDataSource协议的OC对象,都可以是UITableView的数据源。

5、UITableView显示数据的具体步骤:

(1)设置数据源对象。UITableView有一个dataSource属性(指向一个数据源对象)。

(2)必须让数据源对象遵守UITableView的数据源协议,即UITableViewDataSource协议。

(3)在数据源对象中,必须实现UITableViewDataSource协议中的某些特定的方法。这些方法的作用就是告诉UITableView该如何显示数据。

(4)当UITableView运行起来的时候,会不断的调用数据源对象的这些方法来获取对应的数据,显示出来。

6、设置数据源的两种方式:

(1)代码的方式。(一般都设当前控制器为代理类对象)

需要手动为当前控制器类添加数据源协议。

self.tableView.dataSource= self;

(2)脱线的方式。

在场景中选中UITableView组件右键,单击dataSource脱线连接到控制器即可。具体如下图:



7、UITableView的数据源对象需要实现的协议方法:

(1)-(NSTnteger)numberOfSectionsInTableView:(UITableView *) tableView; 此方法是@optional类型的。

这个方法是用来告诉UITableView要显示几组。此方法返回一个数值即要分的组数。此方法也可以不实现,不实现的话就是默认分为一组。Sections是几部分,几个组的意思。

注意:此方法中的tableView参数可以根据UITableView控件设置过的不同tag值从而返回不同的分组数。

(2)-(NSInteger) tableVIew: (UITableVIew *)tableView numberOfRowsInSection:(NSInteger) section;

此方法是@required类型的,要求实现。不实现的话会发出警告。

此方法是用来告诉UITableView每组显示几条(几行)数据。即返回一个整型数值。

注意:\

-当一个View中有多个UITableView控件时,tableVIew参数可以根据已经为每个UITableView控件设置过的不同Tag值来进行区分且经常和switch...case....结构对不同的表格控件做出不同的处理。

- 当UITableView组件中有多个组时,section参数可以用来对第几组进行判断分别设置行数。例如:当前UITableView的第一组要设置3行,第二组要设置4行,第三组要设置5行。示例如下:

switch(tableView.tag)

{

case 10: // 当有多个UITableView时根据设置过的tag判断

switch(section) // 判断是第几组

{

case 0: return 3; // 第一组时返回行数是3

case 1: return 4; // 第二组时返回4行

case 2: return 5; // 第三组时返回5行

}

break;

case 20:

………

break;

default :

return 2;

break;

}

(3)-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

此方法也是@require要求实现的。主要用于告诉UITableView每组的每一行显示什么单元格内容。

indexPath仅仅封装了两个数据:

(一)section 在当前UITableView的第几组

(二)row 在当前UITableView的第几行

注意:此方法需要在内部创建一个单元格对象并返回。

代码验证如下:

新建一个具有simple View类型的IOS工程

编辑控制器的.h文件如下:

//
//  ViewController.h
//  UITableView(一)之数据显示
//
//  Created by apple on 15/8/29.
//  Copyright (c) 2015年 LiuXun. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UITableViewDataSource>
@property (nonatomic, strong) UITableView * tableView1;
@property (nonatomic, strong) UITableView * tableView2;
@end
编辑控制器的.m文件如下:
//
//  ViewController.m
//  UITableView(一)之数据显示
//
//  Created by apple on 15/8/29.
//  Copyright (c) 2015年 LiuXun. All rights reserved.
//

#import "ViewController.h"
#define  TABVIEWTAG1  100
#define  TABVIEWTAG2   200
#define WIDTH    [UIScreen mainScreen].bounds.size.width
#define HEIGHT  [UIScreen mainScreen].bounds.size.height
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];
self.tableView1 = [[UITableView alloc] initWithFrame:CGRectMake(0, 10, WIDTH, HEIGHT/2.5)];
[self.tableView1 setBackgroundColor:[UIColor darkGrayColor]];
self.tableView1.dataSource = self; // 设置当前控制器为数据源对象
self.tableView1.tag  =  TABVIEWTAG1; // 设置tag值
[self.view addSubview:self.tableView1];

self.tableView2 = [[UITableView alloc] initWithFrame:CGRectMake(0, HEIGHT-self.tableView1.frame.size.height-30, WIDTH, HEIGHT/2.5) ];
self.tableView2.dataSource = self;
self.tableView2.tag = TABVIEWTAG2;
[self.view addSubview:self.tableView2];
}

- (void)didReceiveMemoryWarning
{

[super didReceiveMemoryWarning];

}
//  此方法用来告诉UITableView要分为几组  @option类型
-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{
switch (tableView.tag) {
case TABVIEWTAG1:  //为第一个UITableView组件设置为含有一个组
return 1;
break;
case TABVIEWTAG2:  // 为第二个UITableView组件设置两个组
return 2;
break;
default:
return 1;
break;
}
}

//  此方法用来告诉哪个UITableView的哪个分组有几行
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
switch (tableView.tag)
{
case TABVIEWTAG1:
if (section == 0) {
return 5;
}else
return 10;
break;
case TABVIEWTAG2:
switch (section)
{
case 0:
return 3;
break;
case 1:
return 5;
break;
default:
return 10;
break;
}
break;
default:
return 10;
break;
}

}

//  此方法用于告诉哪个UITableView的每一组的每一行显示什么内容
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell  *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
switch (tableView.tag) {
case TABVIEWTAG1:
cell.textLabel.text = [NSString stringWithFormat:@"我的第一个UITableView  第%d 行",indexPath.row];
return cell;
break;
case TABVIEWTAG2:
cell.textLabel.text = [NSString stringWithFormat:@"我的的第二个组件 第%d组  第%d行",indexPath.section,indexPath.row];
return cell;
default:
return cell;
break;
}
}

@end

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: