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
};
|