iPhone:自定义单元格相互重叠

时间:2011-01-12 09:49:59

标签: iphone uitableview

您正在使用Table视图,

我的表视图第一个自定义单元格在滚动时超过了其他单元格

这是我的代码

#import UIKit/UIKit.h 

@interface MyTweetViewController : UIViewController<UITableViewDelegate,UITableViewDataSource> {

IBOutlet  UITableView *tweetsTableView;

NSMutableArray *tweetArray;

}

@property (nonatomic, retain) IBOutlet  UITableView *tweetsTableView;

@end

#import "MyTweetViewController.h"

@implementation MyTweetViewController

@synthesize  tweetsTableView;

- (void)viewDidLoad {

         tweetArray = [[NSMutableArray alloc] init];

    [tweetsTableView setBackgroundColor:[UIColor clearColor]];

    [super viewDidLoad];
}

#pragma mark -
#pragma mark Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    // Return the number of sections.

    return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

 // Return the number of rows in the section.

    return [tweetArray count];

}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

{

return 80;

}
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

{

    [cell setBackgroundColor:[UIColor clearColor]];

}


 //Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

     static NSString *identifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];


if(!cell) {


        cell = [[UITableViewCell alloc] initWithStyle:UITableViewStyleGrouped reuseIdentifier:identifier];

        cell.selectionStyle = UITableViewCellSelectionStyleNone;

    }

cell.accessoryType = UITableViewCellAccessoryNone;

UILabel * name  = [[UILabel alloc]initWithFrame:CGRectMake(72,3,242,15)];

name.text   = (NSString*)[(Tweet*)[tweetArray objectAtIndex:indexPath.row] userName];

[name setFont:[UIFont fontWithName:@"Helvetica" size:14]];

    name.textColor=[UIColor colorWithRed:250 green:250 blue:210 alpha:0.5];

    [name setBackgroundColor:[UIColor clearColor]];

    UILabel * tweetLabel  = [[UILabel alloc]initWithFrame:CGRectMake(72,20,242,60)];

    tweetLabel.text   = (NSString*)[(Tweet*)[tweetArray objectAtIndex:indexPath.row] tweet];

tweetLabel.numberOfLines = 3;

    tweetLabel.textColor=[UIColor colorWithRed:252 green:148 blue:31 alpha:1];

    [tweetLabel setFont:[UIFont fontWithName:@"Helvetica" size:12]];

    [tweetLabel setBackgroundColor:[UIColor clearColor]];

     NSLog(@" lblUserTweet : %@ ",name.text);

    UIImageView *myImage = [[UIImageView alloc]initWithFrame:CGRectMake(6,3,58,49)];

NSURL *url = [NSURL URLWithString:[(Tweet*)[tweetArray objectAtIndex:indexPath.row] image_url]];

NSData *data = [NSData dataWithContentsOfURL:url];

    [myImage setImage: [UIImage imageWithData:data]];

[cell.contentView addSubview:myImage];

    [cell.contentView addSubview:tweetLabel];

    [cell.contentView addSubview:name];


    return cell;

}

- (void)dealloc {

    [tweetsTableView release];

    [tweetArray release];

        [super dealloc];
}

4 个答案:

答案 0 :(得分:3)

不要重复使用单元格

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];

一切顺利。

答案 1 :(得分:1)

您可以一遍又一遍地向可能重复使用的单元格添加组件。

您需要将创建添加标签等添加到if (!cell) { }块中,然后才配置这些组件。

找到正确的UI元素的一种方法是通过您在该块中分配的tag查找它们,另一种方法 - 更优雅的方式 - 是将自定义UITableViewCell子类与属性一起使用这些元素。

编辑:并在添加后释放这些视图 - 或者您只是泄漏它们。

答案 2 :(得分:0)

我认为细胞的高度不合适。

检查代码。

答案 3 :(得分:0)

您可以使用NSString * identifier = @ [NSString stringWithFormat:@“%d”,indexPath.row]作为单元标识符。它将细胞与其他细胞区分开来。