iPhone: custom cell is overlaping with each other
hi i am working on Table view,
my Table view first custom cell is over ride other cell when Scrolling
this is my code
#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 = UITableV开发者_开发技巧iewCellAccessoryNone;
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];
}
Don't reuse the cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];
All the best.
You add components to your potentially reused cell over and over again.
You need to move the creation add adding of labels etc. into the if (!cell) { }
block and only configure those components afterwards.
One way to find the correct UI elements is to look them up by a tag
which you assign in that block, another - more elegant way - is to use a custom UITableViewCell
subclass altogether with properties to those elements.
Edit: And release those views after adding them - or you will just leak them.
I think that the height of the cell is not proper.
Check the code.
you can use NSString *identifier = @[NSString stringWithFormat:@"%d",indexPath.row] as cell identfier. It differentiates the cell from other cell.
精彩评论