Iphone自定義UITableViewCell
這篇把自定義的表格行添出來,廢話不多說,直接看代碼(代碼里面用到的圖片資源就不添出來了):
.h文件:
#import <Foundation/Foundation.h>@interface MyTableCellUtil : NSObject { UIColor *tabletextcolor;//自定義tablecell里面的自體顏色 } @property(nonatomic,retain) UIColor *tabletextcolor;//自定義tablecell里面的自體顏色 - (UIView *)tabcellview:(NSString *)text addImage:(UIImage *)myimage; - (UIView *)tabcellview:(NSString *)text; - (UIView *)tabcellview:(NSString *)text addImage:(UIImage *)myimage addusername:(NSString *)username; @end </pre>.m文件:<pre class="brush:cpp; toolbar: true; auto-links: false;"> #import "MyTableCellUtil.h" @implementation MyTableCellUtil @synthesize tabletextcolor; -(void)dealloc{ [tabletextcolor release]; [super dealloc]; } -(id)init{ [super init]; tabletextcolor = [UIColor whiteColor]; return self; } //有文字有圖片 - (UIView *)tabcellview:(NSString *)text addImage:(UIImage *)myimage{ //行的總view UIView *tablecellview = [[UIView alloc] initWithFrame:CGRectZero]; tablecellview.backgroundColor = [UIColor clearColor]; //行的背景圖片 UIImage *bubble = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"2cell" ofType:@"png"]]; UIImageView *bubbleImageView = [[UIImageView alloc] initWithImage:[bubble stretchableImageWithLeftCapWidth:21 topCapHeight:14]]; //行中的文字部分 UIFont *font = [UIFont systemFontOfSize:13]; CGSize size = [text sizeWithFont:font constrainedToSize:CGSizeMake(200.0f, 1000.0f) lineBreakMode: UILineBreakModeWordWrap]; UILabel *bubbleText = [[UILabel alloc] initWithFrame:CGRectMake(110.0f, 10.0f, size.width, size.height)]; bubbleText.backgroundColor = [UIColor clearColor]; bubbleText.font = font; bubbleText.numberOfLines = 0; bubbleText.lineBreakMode = UILineBreakModeWordWrap; bubbleText.text = text; bubbleText.textColor = self.tabletextcolor; //行中的圖片部分 UIImageView *oneavatarImageView = [[UIImageView alloc] initWithImage:[myimage stretchableImageWithLeftCapWidth:21 topCapHeight:14]]; if (size.height>=80) {//如果文字的高度大于圖片的高度就設置cell的高度為文字的高度加上 bubbleImageView.frame = CGRectMake(0, 0, 310, bubbleText.frame.size.height+20); }else{//否則就設置為圖片的高度加上14,也就是110,圖片這里寫死為96 bubbleImageView.frame = CGRectMake(0, 0, 310, 80); } //添加分割線圖片 UIImage *linerview = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"2line" ofType:@"png"]]; UIImageView *lineImageView = [[UIImageView alloc] initWithImage:[linerview stretchableImageWithLeftCapWidth:21 topCapHeight:14]]; lineImageView.frame = CGRectMake(0, bubbleImageView.frame.size.height, 320, 10); //設置行的總view的frame tablecellview.frame = CGRectMake(0, 0, 320,bubbleImageView.frame.size.height+lineImageView.frame.size.height ); //設置行中圖片的frame oneavatarImageView.frame = CGRectMake(10.0f, (bubbleImageView.frame.size.height/2)-39.0f, 78.0f, 78.0f); [bubbleImageView addSubview:oneavatarImageView]; [oneavatarImageView release]; [bubbleImageView addSubview:bubbleText]; [bubbleText release]; [tablecellview addSubview:bubbleImageView]; [bubbleImageView release]; [tablecellview addSubview:lineImageView]; [lineImageView release]; return [tablecellview autorelease]; } //只有文字 - (UIView *)tabcellview:(NSString *)text{ //行的總view UIView *tablecellview = [[UIView alloc] initWithFrame:CGRectZero]; tablecellview.backgroundColor = [UIColor clearColor]; //行的背景圖片 UIImage *bubble = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"2cellTwo" ofType:@"png"]]; UIImageView *bubbleImageView = [[UIImageView alloc] initWithImage:[bubble stretchableImageWithLeftCapWidth:21 topCapHeight:14]]; //行中的文字部分 UIFont *font = [UIFont systemFontOfSize:16]; CGSize size = [text sizeWithFont:font constrainedToSize:CGSizeMake(300.0f, 1000.0f) lineBreakMode: UILineBreakModeWordWrap]; UILabel *bubbleText = [[UILabel alloc] initWithFrame:CGRectMake(10.0f, 10.0f, size.width+10, size.height+10)]; bubbleText.backgroundColor = [UIColor clearColor]; bubbleText.font = font; bubbleText.numberOfLines = 0; bubbleText.lineBreakMode = UILineBreakModeWordWrap; bubbleText.text = text; bubbleText.textColor = self.tabletextcolor; //添加分割線圖片 UIImage *linerview = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"2line" ofType:@"png"]]; UIImageView *lineImageView = [[UIImageView alloc] initWithImage:[linerview stretchableImageWithLeftCapWidth:21 topCapHeight:14]]; lineImageView.frame = CGRectMake(0,bubbleText.frame.size.height+20, 320, 1); //設置行背景圖片的frame bubbleImageView.frame = CGRectMake(0, 0, 320, bubbleText.frame.size.height+20+lineImageView.frame.size.height); //設置行的總view的frame tablecellview.frame = CGRectMake(0, 0, 320,bubbleImageView.frame.size.height); [bubbleImageView addSubview:bubbleText]; [bubbleText release]; [bubbleImageView addSubview:lineImageView]; [lineImageView release]; [tablecellview addSubview:bubbleImageView]; [bubbleImageView release]; return [tablecellview autorelease]; } //行程微博的cellview - (UIView *)tabcellview:(NSString *)text addImage:(UIImage *)myimage addusername:(NSString *)username{ //行的總view UIView *tablecellview = [[UIView alloc] initWithFrame:CGRectZero]; tablecellview.backgroundColor = [UIColor clearColor]; //行的背景圖片 UIImage *bubble = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"2cell" ofType:@"png"]]; UIImageView *bubbleImageView = [[UIImageView alloc] initWithImage:[bubble stretchableImageWithLeftCapWidth:21 topCapHeight:14]]; //行中的文字部分 UIFont *font = [UIFont systemFontOfSize:13]; CGSize size = [text sizeWithFont:font constrainedToSize:CGSizeMake(200.0f, 1000.0f) lineBreakMode: UILineBreakModeWordWrap]; UILabel *bubbleText = [[UILabel alloc] initWithFrame:CGRectMake(110.0f, 10.0f, size.width, size.height)]; bubbleText.backgroundColor = [UIColor clearColor]; bubbleText.font = font; bubbleText.numberOfLines = 0; bubbleText.lineBreakMode = UILineBreakModeWordWrap; bubbleText.text = text; bubbleText.textColor = self.tabletextcolor; //行中的圖片部分 UIImageView *oneavatarImageView = [[UIImageView alloc] initWithImage:[myimage stretchableImageWithLeftCapWidth:21 topCapHeight:14]]; //發表微博的人 UIButton *mybuttonp = [UIButton buttonWithType:UIButtonTypeCustom]; CGRect frame = CGRectMake(160, bubbleText.frame.size.height+20, 150, 20); mybuttonp.frame = frame; [mybuttonp setTitle:[NSString stringWithFormat:@"發表人:%@",username] forState:UIControlStateNormal]; // [mybuttonshang addTarget:self action:@selector(buttonViewChat) forControlEvents:UIControlEventTouchUpInside]; mybuttonp.backgroundColor = [UIColor clearColor]; mybuttonp.titleLabel.textColor = self.tabletextcolor; mybuttonp.titleLabel.font = [UIFont systemFontOfSize:13]; //設置背景圖片的frame if (size.height+20+mybuttonp.frame.size.height>=80) {//如果文字的高度大于圖片的高度就設置cell的高度為文字的高度加上 bubbleImageView.frame = CGRectMake(0, 0, 310, bubbleText.frame.size.height+20+mybuttonp.frame.size.height); }else{//否則就設置為圖片的高度加上14,也就是110,圖片這里寫死為96 bubbleImageView.frame = CGRectMake(0, 0, 310, 80); } //添加分割線圖片 UIImage *linerview = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"2line" ofType:@"png"]]; UIImageView *lineImageView = [[UIImageView alloc] initWithImage:[linerview stretchableImageWithLeftCapWidth:21 topCapHeight:14]]; lineImageView.frame = CGRectMake(0, bubbleImageView.frame.size.height, 320, 10); //設置行的總view的frame tablecellview.frame = CGRectMake(0, 0, 320,bubbleImageView.frame.size.height+lineImageView.frame.size.height ); //設置行中圖片的frame oneavatarImageView.frame = CGRectMake(10.0f, (bubbleImageView.frame.size.height/2)-39.0f, 78.0f, 78.0f); [bubbleImageView addSubview:oneavatarImageView]; [oneavatarImageView release]; [bubbleImageView addSubview:bubbleText]; [bubbleText release]; [bubbleImageView addSubview:mybuttonp]; // [mybuttonp release]; [tablecellview addSubview:bubbleImageView]; [bubbleImageView release]; [tablecellview addSubview:lineImageView]; [lineImageView release]; return [tablecellview autorelease]; } @end </pre>調用的時候直接(記得設置每行的高度為當前自定義view的高度):<pre class="brush:cpp; toolbar: true; auto-links: false;">- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; }
// NSString cellvalue;
// //為第一個section填充數據
// // if (indexPath.section == 0) {
// MyjsonResultUtil myjsonUT = [self.mynotealljsonarray objectAtIndex:indexPath.section];
// if ([self.mynotealljsonarray count]>0) {
// oneSectionData = myjsonUT.discriptionarray;
// }
// cellvalue = [oneSectionData objectAtIndex:indexPath.row];
// cell.textLabel.text = cellvalue;
// //為每一行右邊添加箭頭
// cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
// cell.textLabel.font = [UIFont fontWithName:@"Verdana" size:15];MyjsonResultUtil * myjsonUT = [self.mynotealljsonarray objectAtIndex:indexPath.section]; if ([self.mynotealljsonarray count]>0) { oneSectionData = myjsonUT.discriptionarray; } cell.selectionStyle = UITableViewCellSelectionStyleNone; cell.backgroundColor = [UIColor clearColor]; UIImage *oneiavatar = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"apple" ofType:@"png"]]; MyTableCellUtil *mytablecelluitl = [[MyTableCellUtil alloc]init]; UIView *pinglunview = [mytablecelluitl tabcellview:[NSString stringWithFormat:@"%@",[oneSectionData objectAtIndex:indexPath.row]] addImage:oneiavatar]; cell.backgroundView = pinglunview;
// [cell.contentView addSubview:pinglunview];
[mytablecelluitl release];return cell;
}
//- (NSString )tableView:(UITableView )tableView
//titleForHeaderInSection:(NSInteger)section{
// }
(CGFloat)tableView:(UITableView )tableView heightForRowAtIndexPath:(NSIndexPath )indexPath {
// return 70;
UIImage oneiavatar = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"apple" ofType:@"png"]];
MyTableCellUtil mytablecelluitl = [[MyTableCellUtil alloc]init];
UIView *pinglunview = [mytablecelluitl tabcellview:[NSString stringWithFormat:@"%@",[oneSectionData objectAtIndex:indexPath.row]] addImage:oneiavatar];[mytablecelluitl release];
return pinglunview.frame.size.height;
} </pre>