您的位置:首页 > 产品设计 > UI/UE

Iphone自定义UITableViewCell

2012-04-29 12:35 417 查看
好久没写博客了,主要是最近一段时间忙于一个开发一个工程,现在工程开发的差不多了,打算把我在工程里面封装的一些工具类添上来,这篇把自定义的表格行添出来,废话不多说,直接看代码(代码里面用到的图片资源就不添出来了):

.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


.m文件:

#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


调用的时候直接(记得设置每行的高度为当前自定义view的高度):

- (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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: