我有下面的代碼來填充我的UITableView。IPHONE:不釋放內容的UITableView單元
我必須顯示兩種單元格:一個帶有背景圖像的常規單元格和一個帶有常規背景圖像的單元格,外加一個標籤和一個按鈕。
如果Indexpath.row小於控制變量,則繪製常規單元格。如果沒有,繪製帶有按鈕和標籤的單元格。
這是代碼
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = @"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:MyIdentifier] autorelease];
}
UIImage *imageU;
if (indexPath.row < controlVariable) {
imageU = [[[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle]
pathForResource:[NSString stringWithFormat: @"table%d", indexPath.row] ofType:@"jpg"]] autorelease];
cell.imageView.image = imageU;
} else {
imageU = [[[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle]
pathForResource:[NSString stringWithFormat: @"table-pg%d",numberX]
ofType:@"jpg"]] autorelease];
cell.imageView.image = imageU;
NSString * myString = [NSString stringWithFormat: @"pago%d", numberX];
UILabel * myLabel = [[UILabel alloc] initWithFrame:CGRectMake(5.0, 49.0, 200.0, 22.0)];
[myLabel setTextAlignment:UITextAlignmentLeft];
[myLabel setBackgroundColor:[UIColor blueColor]];
[myLabel setClipsToBounds:YES];
[myLabel setFont:[UIFont systemFontOfSize:14.0]];
[myLabel setTextColor:[UIColor blackColor]];
[myLabel setText: myString];
[myLabel setAlpha:0.6];
[cell addSubview: myLabel];
[myLabel release];
UIButton *buyButton = [[UIButton alloc] initWithFrame:CGRectMake(220, 4, 100, 35)];
buyButton.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
buyButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
[buyButton setTitle:NSLocalizedString(@"buyKey", @"") forState:UIControlStateNormal];
[buyButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
buyButton.titleLabel.font = [UIFont boldSystemFontOfSize:14];
UIImage *newImage = [[[[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle]
pathForResource: @"whiteButton" ofType:@"png"]] autorelease]
stretchableImageWithLeftCapWidth:12.0f topCapHeight:0.0f];
[buyButton setBackgroundImage:newImage forState:UIControlStateNormal];
[buyButton addTarget:self action:@selector(comprar:) forControlEvents:UIControlEventTouchDown];
buyButton.backgroundColor = [UIColor clearColor];
[buyButton setTag:indexPath.row];
[cell addSubview:buyButton];
[buyButton release];
}
return cell;
}
這段代碼的問題是:當我滾動的UITableView下來,達到普通細胞和細胞按鈕和標籤之間的分工,我認爲這是正確的渲染,但如果我深入後去,我會看到按鈕和標籤被添加到不應該有的單元格中。從這一刻起,所有單元格都包含按鈕和標籤...
這就好像單元在繪製之前不會釋放其內容。這就像標籤和按鈕被添加到單元格上已有的其他按鈕和標籤之上。細胞在再次繪製之前不會釋放其內容。
如何解決?
感謝您的任何幫助。
注:我看到兩個第一個答案建議的更改後幾乎沒有區別。現在,並非所有的細胞都是錯的,只是一些。每當我向下滾動表格並返回到表格的開頭時,它們都會發生變化。
謝謝,就是這樣! – SpaceDog 2009-10-20 22:24:06
這非常有用,謝謝。另外,不要使用標籤,如0,1,2,3 – irco 2010-11-06 02:06:00