表视图基础:
表视图是显示表数据的视图对象,它是UITableView类的一个实例。表中的每个可见行都由UITableViewCell类实现。
表视图遵从UITableViewDataSource协议和UITableViewDelegate协议。
UITableViewCell可以添加视图:方法如下:
1、在创建单元是添加子视图
2、从nib文件中加载它们。
表视图有两种基本样式:
1、分组表
2、无格式表
表视图样式
1、图像:位于单元文本左侧
· 2、文本标签:这是单元的主要文本
3、详细文本标签:这是单元的辅助文本
简单表的实现:
.h文件
#import <UIKit/UIKit.h>
@interface Simple_TableViewController : UIViewController
<UITableViewDelegate, UITableViewDataSource>
{
NSArray *listData;
}
@property (nonatomic, retain) NSArray *listData;
@end
.m文件
@implementation Simple_TableViewController
@synthesize listData;
- (void)viewDidLoad {
NSArray *array = [[NSArray alloc] initWithObjects:@"Sleepy", @"Sneezy",
@"Bashful", @"Happy", @"Doc", @"Grumpy", @"Dopey", @"Thorin",
@"Dorin", @"Nori", @"Ori", @"Balin", @"Dwalin", @"Fili", @"Kili",
@"Oin", @"Gloin", @"Bifur", @"Bofur", @"Bombur", nil];
self.listData = array;
[array release];
[super viewDidLoad];
}
- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
self.listData = nil;
[super viewDidUnload];
}
- (void)dealloc {
[listData release];
[super dealloc];
}
#pragma mark -
#pragma mark Table View Data Source Methods
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section
{
return [self.listData count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath //当表格绘制其中一行会调用此方法
{
static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:
SimpleTableIdentifier];
if (cell == nil) {
#ifdef __IPHONE_3_0
// Other styles you can try
// UITableViewCellStyleSubtitle
// UITableViewCellStyleValue1
// UITableViewCellStyleValue2
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier: SimpleTableIdentifier] autorelease];
#else
cell = [[[UITableViewCell alloc] initWithFrame::CGRectZero
reuseIdentifier: SimpleTableIdentifier] autorelease];
#endif
}
UIImage *image = [UIImage imageNamed:@"star.png"];
UIImage *image2 = [UIImage imageNamed:@"star2.png"];
cell.imageView.image = image;
cell.imageView.highlightedImage = image2;
NSUInteger row = [indexPath row];
cell.textLabel.text = [listData objectAtIndex:row];
cell.textLabel.font = [UIFont boldSystemFontOfSize:50];
#ifdef __IPHONE_3_0
if (row < 7)
cell.detailTextLabel.text = @"Mr. Disney";
else
cell.detailTextLabel.text = @"Mr. Tolkein";
#endif
return cell;
}
#pragma mark -
#pragma mark Table Delegate Methods
- (NSInteger)tableView:(UITableView *)tableView
indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath //设置缩进级别
{
NSUInteger row = [indexPath row];
return row;
}
-(NSIndexPath *)tableView:(UITableView *)tableView
willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSUInteger row = [indexPath row];
if (row == 0)
return nil;
return indexPath;
}
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSUInteger row = [indexPath row];
NSString *rowValue = [listData objectAtIndex:row];
NSString *message = [[NSString alloc] initWithFormat:
@"You selected %@", rowValue];
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"Row Selected!"
message:message
delegate:nil
cancelButtonTitle:@"Yes I Did"
otherButtonTitles:nil];
[alert show];
[message release];
[alert release];
[tableView deselectRowAtIndexPath:indexPath animated:YES]; //取消选中行
}
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath //设置行高
{
return 70;
}
@end