UITableView基本总结

1.表视图从遵循UITableViewDelegate协议的对象获取配置数据,从遵循UITableViewDataSource协议的对象获得行数据。必须实现以下方法

1
2
3
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

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

随便介绍下其他常用选用方法

1
2
3
4
// UITableViewDataSource中常用方法

// 设置TableView的分区数,默认为1
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
1
2
3
4
5
6
7
8
9
10
// UITableViewDelegate中常用方法

// 行高
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

// 分区间的高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;

// tableview点击事件的触发,该方法用的也是很平凡的每当点击一行的cell想执行视图跳转多半都是使用该方法的
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

2.重用UITableViewCell
因为ios设备内容有限而且UITableView对象要显示大量的记录,并且每条记录都需要创建相对用的UITableViewCell对象,就会耗尽ios的内容资源。因此需要重用UITableViewCell

1
TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];

当用户滚动UITableView对象时,部分的UITableViewCell对象会移出窗口,这时UITableView对象会将移出窗口的UITableViewCell对象放入UITableViewCell对象池等待重用。
UITableView对象要求数据源返回某个UITableViewCell对象时,数据源可以查看对象池。如果有未使用的UITableViewCell对象,就可以用新的数据配置这个UITableViewCell对象,然后将其返回给UITableView对象,从而避免创建对象。

这么说可能不是很好理解简洁点说就是当第一行的cell被往上滑出屏幕的时候,在屏幕下面第一个显示新的cell就是被我们滑出屏幕的cell

3.UITableViewCellStyle

当不使用创建UITableViewCell来设置cell的样式的时候可以使用下面的UITableViewCellStyle来设置cell的样式

UITableViewCellStyleDefault

UITableViewCellStyleValue1

UITableViewCellStyleValue2

![] (https://github.com/zhigangwu/zhigangwu.github.io/blob/master/images/16.png?raw=true)

UITableViewCellStyleSubtitle

![] (https://github.com/zhigangwu/zhigangwu.github.io/blob/master/images/17.png?raw=true)

1
2
3
4
5
6
7
8
9
10
11
12
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"];

cell.imageView.image = [UIImage imageNamed:@"1"];

cell.textLabel.text = [self.array objectAtIndex:indexPath.row];
cell.detailTextLabel.text = @"副标题";
cell.textLabel.textColor = [UIColor redColor];

return cell;
}

4UITableView的编辑

开启UITableView的编辑功能将editing属性设置为YES.

1
2
3
4
5
6
7
8
- (void)viewDidLoad {
[super viewDidLoad];

self.array = @[@"1",@"2",@"3"];

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
self.tableView.editing = YES;
}

点击图中带减号的红圆圈``cell会向左侧移动右侧会出现Delete按钮。实现Delete按钮,添加下面方法

1
2
3
4
5
6
7
8
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
[self.MuTableArray removeObjectAtIndex:indexPath.row];

[tableView deleteRowsAtIndexPaths:[NSMutableArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}

注意因为在删除cell的同时其实是在删除数组中的数据因此该数据必须是可变的所以必须是NSMutableArray类型而非NSArray