uitableview几乎是ios开发中用处最广的一个控件,当然也是要记相当多东西的一个控件。
创建
首先创建一个新的项目,并添加一个mainviewcontroller的class文件
打开mainviewcontroller.h文件
1
2
3
4
5
6
|
@interface mainviewcontroller : uiviewcontroller<uitableviewdatasource,uitableviewdelegate> @property (nonatomic, retain) nsarray *datalist; @property (nonatomic, retain) uitableview *mytableview; @end |
tableview的数据源uitableviewdatasource。
tableview的委托uitableviewdelegate。
如果当前类是继承自uiviewcontroller,需要添加上面的代码,如果直接继承自uitableviewcontroller则不需要添加
然后打mainviewcontroller.m文件,初始化uitableview并显示在当前窗口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
- ( void )viewdidload { [super viewdidload]; // 初始化tableview的数据 nsarray *list = [nsarray arraywithobjects:@ "武汉" ,@ "上海" ,@ "北京" ,@ "深圳" ,@ "广州" ,@ "重庆" ,@ "香港" ,@ "台海" ,@ "天津" , nil]; self.datalist = list; uitableview *tableview = [[[uitableview alloc] initwithframe:self.view.frame style:uitableviewstyleplain] autorelease]; // 设置tableview的数据源 tableview.datasource = self; // 设置tableview的委托 tableview.delegate = self; // 设置tableview的背景图 tableview.backgroundview = [[uiimageview alloc] initwithimage:[uiimage imagenamed:@ "background.png" ]]; self.mytableview = tableview; [self.view addsubview:mytableview]; } |
在初始化的时候,可以为tableview设置样式
第一种:列表 uitableviewstyleplain
第二种:分组uitableviewstylegrouped
创建并设置每行显示的内容
1
2
3
4
5
6
7
8
9
10
11
12
13
|
- (uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath { static nsstring *cellwithidentifier = @ "cell" ; uitableviewcell *cell = [tableview dequeuereusablecellwithidentifier:cellwithidentifier]; if (cell == nil) { cell = [[uitableviewcell alloc] initwithstyle:uitableviewcellstylevalue2 reuseidentifier:cellwithidentifier]; } nsuinteger row = [indexpath row]; cell.textlabel.text = [self.datalist objectatindex:row]; cell.imageview.image = [uiimage imagenamed:@ "green.png" ]; cell.detailtextlabel.text = @ "详细信息" ; return cell; } |
uitableviewcell的样式也是可以进行设置的,如果不能满足项目的需要,可以自己定义uitableviewcell的样式
uitableviewcellstyledefault
uitableviewcellstylesubtitle
uitableviewcellstylevalue1
uitableviewcellstylevalue2
分组的tableview还可以进行内容的分段,是通过下面的方法实现,返回的数字1代表分为1段
1
2
3
4
|
- (nsinteger)numberofsectionsintableview:(uitableview *)tableview { return 1; } |
设置内容缩进
1
2
3
4
|
- (nsinteger)tableview:(uitableview *)tableview indentationlevelforrowatindexpath:(nsindexpath *)indexpath { return [indexpath row]; } |
设置cell的行高
1
2
3
4
|
- (cgfloat)tableview:(uitableview *)tableview heightforrowatindexpath:(nsindexpath *)indexpath { return 70; } |
设置cell的隔行换色
1
2
3
4
5
6
7
8
|
- ( void )tableview:(uitableview *)tableview willdisplaycell:(uitableviewcell *)cell forrowatindexpath:(nsindexpath *)indexpath { if ([indexpath row] % 2 == 0) { cell.backgroundcolor = [uicolor bluecolor]; } else { cell.backgroundcolor = [uicolor greencolor]; } } |
当选择指定的cell时,弹出uialertview显示选择的内容
1
2
3
4
5
6
7
8
|
- ( void )tableview:(uitableview *)tableview didselectrowatindexpath:(nsindexpath *)indexpath { nsstring *msg = [[nsstring alloc] initwithformat:@ "你选择的是:%@" ,[self.datalist objectatindex:[indexpath row]]]; uialertview *alert = [[uialertview alloc] initwithtitle:@ "提示" message:msg delegate:self cancelbuttontitle:@ "确定" otherbuttontitles:nil, nil]; [msg release]; [alert show]; } |
滑动选择的行后删除
1
2
3
4
|
- ( void )tableview:(uitableview *)tableview commiteditingstyle:(uitableviewcelleditingstyle)editingstyle forrowatindexpath:(nsindexpath *)indexpath { nslog(@ "执行删除操作" ); } |
uitableview的刷新:
1
|
[self.tableview reloaddata]; |
reloaddata是刷新整个uitableview,有时候,我们可能需要局部刷新。比如:只刷新一个cell、只刷新一个section等等。这个时候在调用reloaddata方法,虽然用户看不出来,但是有些浪费资源。
刷新局部cell:
nsindexpath *indexpath = [nsindexpath indexpathforrow:0 insection:0];
[self.tableview reloadrowsatindexpaths:[nsarray arraywithobjects:indexpath,nil] withrowanimation:uitableviewrowanimationfade];
局部刷新section:
1
2
|
nsindexset *indexset = [[nsindexset alloc] initwithindex:0]; [self.tableview reloadsections:indexset withrowanimation:uitableviewrowanimationfade]; |
上面这段代码是刷新第0个section。
刷新动画:
刷新uitableview还有几个动画:
1
2
3
4
5
6
7
8
9
10
|
typedef ns_enum(nsinteger, uitableviewrowanimation) { uitableviewrowanimationfade, //淡入淡出 uitableviewrowanimationright, //从右滑入 // slide in from right (or out to right) uitableviewrowanimationleft, //从左滑入 uitableviewrowanimationtop, //从上滑入 uitableviewrowanimationbottom, //从下滑入 uitableviewrowanimationnone, // available in ios 3.0 uitableviewrowanimationmiddle, // available in ios 3.2. attempts to keep cell centered in the space it will/did occupy uitableviewrowanimationautomatic = 100 // available in ios 5.0. chooses an appropriate animation style for you }; |