最近项目中需要实现如下图所示的效果:
通过界面我们断定是一个UITableView,分成三部分,第一部分是全天,第二部分是上午,第三部分是下午。最主要的是AM和PM中也是列表,这个就比较复杂了。我的做法是在Iphone在table cell中添加自定义布局view这篇文章的基础上制作更复杂的界面。具体的过程如下:
- 创建UITableViewCell的自定义类,这个就不用说了,在之前的博客中介绍过。
- 在创建的cell中添加一个新的UITableView。
代码
在自定义的cell中添加组建,我的类是MyProfileTableViewCell,在这个中添加:
IBOutlet UITableView * myTaleView;
IBOutlet UILabel * lable;
实现相应的set get方法。在和IB中相应的组建相连。
在tableview中引入相应的cell:
- (UITableViewCell * )tableView:(UITableView * )tableView cellForRowAtIndexPath:(NSIndexPath * )indexPath {
static NSString * CellIdentifier = @" CustomCellIdentifier " ;
if ([indexPath section] == 0 ) {
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellSelectionStyleGray
reuseIdentifier:CellIdentifier] autorelease];
}
return cell;
} else {
MyProfileTableViewCell * cell = (MyProfileTableViewCell * )[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
NSArray * array = [[NSBundle mainBundle] loadNibNamed: @" MyProfileTableViewCell " owner:self options:nil];
cell = [array objectAtIndex: 0 ];
[cell setSelectionStyle:UITableViewCellSelectionStyleGray];
if ([indexPath section] == 1 ) {
[[cell lable] setText: @" AM " ];
}
if ([indexPath section] == 2 ) {
[[cell lable] setText: @" PM " ];
}
return cell;
}
}
在相应的cell中添加UITableView相应的Delegate和DataSource,我的cell完整的声明如下:
#import < UIKit / UIKit.h >
@interface MyProfileTableViewCell : UITableViewCell
< UITableViewDelegate,UITableViewDataSource > {
IBOutlet UITableView * myTaleView;
IBOutlet UILabel * lable;
}
@property (nonatomic,retain) UITableView * myTaleView;
@property (nonatomic,retain) UILabel * lable;
@end
在添加相应的协议函数即可:
#import " MyProfileTableViewCell.h "
#import " MyTableViewCell.h "
@implementation MyProfileTableViewCell
@synthesize myTaleView,lable;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * )reuseIdentifier {
if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {
}
return self;
}
- ( void )setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
}
- ( void )dealloc {
[self.lable release];
[self.myTaleView release];
[super dealloc];
}
- (NSInteger)tableView:(UITableView * )tableView1 numberOfRowsInSection:(NSInteger)section {
return 5 ;
}
- (UITableViewCell * )tableView:(UITableView * )tableView cellForRowAtIndexPath:(NSIndexPath * )indexPath {
static NSString * CellIdentifier = @" CustomCellIdentifier " ;
MyTableViewCell * cell = (MyTableViewCell * )[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray * array = [[NSBundle mainBundle] loadNibNamed: @" MyTableViewCell " owner:self options:nil];
cell = [array objectAtIndex: 0 ];
[cell setSelectionStyle:UITableViewCellSelectionStyleGray];
}
[[cell label] setText: @" 10:00 " ];
[[cell _content] setText: @" 早上起来卖大米,卖了一筐大大米。\n早上起来卖大米,卖了一筐大大米。 " ];
return cell;
}
- (CGFloat)tableView:(UITableView * )atableView heightForRowAtIndexPath:(NSIndexPath * )indexPath
{
return 56 ;
}
@end
IBOutlet UITableView * myTaleView;
IBOutlet UILabel * lable;
实现相应的set get方法。在和IB中相应的组建相连。
在tableview中引入相应的cell:
- (UITableViewCell * )tableView:(UITableView * )tableView cellForRowAtIndexPath:(NSIndexPath * )indexPath {
static NSString * CellIdentifier = @" CustomCellIdentifier " ;
if ([indexPath section] == 0 ) {
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellSelectionStyleGray
reuseIdentifier:CellIdentifier] autorelease];
}
return cell;
} else {
MyProfileTableViewCell * cell = (MyProfileTableViewCell * )[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
NSArray * array = [[NSBundle mainBundle] loadNibNamed: @" MyProfileTableViewCell " owner:self options:nil];
cell = [array objectAtIndex: 0 ];
[cell setSelectionStyle:UITableViewCellSelectionStyleGray];
if ([indexPath section] == 1 ) {
[[cell lable] setText: @" AM " ];
}
if ([indexPath section] == 2 ) {
[[cell lable] setText: @" PM " ];
}
return cell;
}
}
在相应的cell中添加UITableView相应的Delegate和DataSource,我的cell完整的声明如下:
#import < UIKit / UIKit.h >
@interface MyProfileTableViewCell : UITableViewCell
< UITableViewDelegate,UITableViewDataSource > {
IBOutlet UITableView * myTaleView;
IBOutlet UILabel * lable;
}
@property (nonatomic,retain) UITableView * myTaleView;
@property (nonatomic,retain) UILabel * lable;
@end
在添加相应的协议函数即可:
#import " MyProfileTableViewCell.h "
#import " MyTableViewCell.h "
@implementation MyProfileTableViewCell
@synthesize myTaleView,lable;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * )reuseIdentifier {
if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {
}
return self;
}
- ( void )setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
}
- ( void )dealloc {
[self.lable release];
[self.myTaleView release];
[super dealloc];
}
- (NSInteger)tableView:(UITableView * )tableView1 numberOfRowsInSection:(NSInteger)section {
return 5 ;
}
- (UITableViewCell * )tableView:(UITableView * )tableView cellForRowAtIndexPath:(NSIndexPath * )indexPath {
static NSString * CellIdentifier = @" CustomCellIdentifier " ;
MyTableViewCell * cell = (MyTableViewCell * )[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray * array = [[NSBundle mainBundle] loadNibNamed: @" MyTableViewCell " owner:self options:nil];
cell = [array objectAtIndex: 0 ];
[cell setSelectionStyle:UITableViewCellSelectionStyleGray];
}
[[cell label] setText: @" 10:00 " ];
[[cell _content] setText: @" 早上起来卖大米,卖了一筐大大米。\n早上起来卖大米,卖了一筐大大米。 " ];
return cell;
}
- (CGFloat)tableView:(UITableView * )atableView heightForRowAtIndexPath:(NSIndexPath * )indexPath
{
return 56 ;
}
@end