iPhone SDK提供了默认的几个TableView样式,但是如果想提供更个性化的样式就需要自己定义。 比如添加背景
如上图的样子。 其实自定义table view的样子很简单,无非就是把table view和table view cell的背景变成透明的,然后在指定视图和cell的背景图片(当然,也可以指定table view的背景图片)
@interface MainViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
{
UITableView *theTableView;
}
先建立Controller,注意是继承自UIViewController而不是UITableViewController
实现类
- (id)init
{
if (self = [super init])
{
self.view = [[[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease];
// Setup the background
UIImageView *background = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background.png"]];
[self.view addSubview:background];
[background release];
// Create table view
theTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 11, 320, 460) style: UITableViewStylePlain];
[theTableView setDelegate:self];
[theTableView setDataSource:self];
// This should be set to work with the image height
[theTableView setRowHeight:68];
// Transparent, so we can see the background
[theTableView setBackgroundColor:[UIColor clearColor]];
[theTableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
[theTableView setIndicatorStyle:UIScrollViewIndicatorStyleWhite];
[self.view addSubview:theTableView];
}
return self;
}
代码中的注释已经很清楚了。 先设置视图的背景,再设定table view的背景
再看另外一断代码,设置了cell的背景,注意,这里面使用了自定义的cell类CustomCell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CustomCell *cell= [[[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil] autorelease];
// Default to no selected style and not selected
cell.selectionStyle = UITableViewCellSelectionStyleNone;
// Set the image for the cell
[cell setTheImage:[UIImage imageNamed:[NSString stringWithFormat:@"Arrows%d.png", indexPath.row + 1]]];
return cell;
}
我们再看看如何定义自定义的cell
#import <UIKit/UIKit.h>
@interface CustomCell : UITableViewCell
{
UIImageView *image;
}
- (void) setTheImage:(UIImage *)icon;
@end
再看实现类
#import "CustomCell.h"
@implementation CustomCell
/*---------------------------------------------------------------------------
*
*--------------------------------------------------------------------------*/
-(id) initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])
{
// Cells are transparent
[self.contentView setBackgroundColor:[UIColor clearColor]];
}
return self;
}
/*---------------------------------------------------------------------------
*
*--------------------------------------------------------------------------*/
- (void) setTheImage:(UIImage *) icon
{
// Alloc and set the frame
image = [[UIImageView alloc] initWithImage:icon];
image.frame = CGRectMake(0, 0, 286, 68);
// Add subview
[self.contentView addSubview:image];
}
/*---------------------------------------------------------------------------
*
*--------------------------------------------------------------------------*/
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
if (selected == YES)
image.alpha = .5;
else
image.alpha = 1;
}
/*---------------------------------------------------------------------------
*
*--------------------------------------------------------------------------*/
- (void)dealloc
{
[image release];
[super dealloc];
}
@end
还是很简单的吧。