转载自http://www.devdiv.com/home.php?mod=space&uid=18486&do=blog&id=6138
UITableView 使用总结
||
UITableView是iOS开发中,使用最广泛的组件之一。通常都用它来展示一列数据,如果和NavigationController结合,就能方便的展示层次化得数据,比如Contacts。
使用UITableView,需要为它提供两个代理类,一个是UITableViewDataSource,用来给TableView提供数据; 另一个是UITableViewDelegate,控制TableView的展示方式以及事件响应。
Protocol UITableViewDataSource
实现UITableViewDataSource的代理类,必须实现三个方法:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
-
示例代码:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return
[regions count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Number of rows is the number of time zones in the region for the specified section.
Region *region = [regions objectAtIndex:section];
return
[region.timeZoneWrappers count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static
NSString *MyIdentifier =
@"MyIdentifier"
;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if
(cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease];
}
Region *region = [regions objectAtIndex:indexPath.section];
TimeZoneWrapper *timeZoneWrapper = [region.timeZoneWrappers objectAtIndex:indexPath.row];
cell.textLabel.text = timeZoneWrapper.localeName;
return
cell;
}
方法一返回TableView的Section的数据, 方法二返回每一个section有的row的数据, 方法三给每一个row返回一个TableViewCell,因为TableView只有一例。
默认的TableViewCell可以设置一个image,一个text, 一个subtitle。但是显示什么数据还取决与当前这个TableViewCellStyle。
UITableViewDataSource的其他常用方法示例:
//设置section tital
- (NSString *)tableView:(UITableView *)tableViewtitleForHeaderInSection:(NSInteger)section{
return @"taiyang";
}
待续!!!!
Protocal UITableViewDelegate
UITableViewDelegate用来管理Row的选择和编辑。
- tableView:willSelectRowAtIndexPath:
- tableView:didSelectRowAtIndexPath:
- tableView:willDeselectRowAtIndexPath:
- tableView:didDeselectRowAtIndexPath:
此四个方法管理Row的选择. 例如willSelectRowAtIndexPath, 如果此方法返回nil,那么所属的row将无法被选中。
- tableView:willBeginEditingRowAtIndexPath:
- tableView:didEndEditingRowAtIndexPath:
- tableView:editingStyleForRowAtIndexPath:
- tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath:
此四个方法在编辑Row时会被触发。editingStyleForRowAtIndexPath决定Row是否可以被编辑,删除或者移动。targetIndexPathForMoveFromRowAtIndexPath则在移动Row时会把触发,在交换Row位置的时候,必须同时交换DataSource中数据的位置。
UITableViewDelegate 其他常用方法示例:
//行缩进
-(NSInteger)tableView:(UITableView *)tableViewindentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath{NSUInteger row = [indexPath row];
return row;
}
//改变行的高度
- (CGFloat)tableView:(UITableView *)tableViewheightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 40;
}
待续!!!!UITableView section 头委托view
//section头委托view
- (UIView *)tableView:(UITableView *)tableViewviewForHeaderInSection:(NSInteger)section{
if (section == 0) {
tableView.sectionHeaderHeight = 100;
//创建一个视图(v_headerView)
UIView *v_headerView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 100)];
//创建一个UIimageView(v_headerImageView)
UIImageView *v_headerImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 320, 100)];
//给v_headerImageView设置图片
v_headerImageView.image = [UIImage imageNamed:@"icon_test.png"];
//将v_headerImageView添加到创建的视图(v_headerView)中
[v_headerView addSubview:v_headerImageView];
//释放v_headerImageView所占用的资源
[v_headerImageView release];
//创建一个UILable(v_headerLab)用来显示标题
UILabel *v_headerLab = [[UILabel alloc]initWithFrame:CGRectMake(10, 1, 100, 19)];
//设置v_headerLab的背景颜色
v_headerLab.backgroundColor = [UIColor clearColor];
//设置v_headerLab的字体颜色
v_headerLab.textColor = [UIColor grayColor];
//设置v_headerLab的字体样式和大小
v_headerLab.font = [UIFont fontWithName:@"Arial" size:13];
//设置v_headerLab的字体的投影
v_headerLab.shadowColor = [UIColor whiteColor];
//设置v_headerLab的字体投影的位置
[v_headerLab setShadowOffset:CGSizeMake(0, 1)];
//设置每组的的标题
v_headerLab.text = @"测试数据";
//将标题v_headerLab添加到创建的视图(v_headerView)中
[v_headerView addSubview:v_headerLab];
//释放v_headerLab所占用的资源
[v_headerLab release];
//将视图(v_headerView)返回
return v_headerView;
}
else{
return nil;
}
}
想要详细了解如何使用TableView的最好的地方当然是Apple Developer官方的文档。Table View in iOS Applications