我試圖用兩種不同類型的UITableViewCells打印UITableView。包含任何操作(第一2細胞),只是一個黑色背景 來自UITableView的怪異行爲
- 空表視圖細胞(第三和隨後的細胞)
我的表格視圖的高度在任何時候都能夠適應至少3個表格視圖單元格。
當我第一次加載表視圖時,表視圖看起來非常好 - 前兩行是黑色的,後面跟着第三行,標籤上寫着「1」。
但是,滾動到底部然後滾動回來。我的前兩個空單元格(應該是空的)填充了只能在第三個單元格和後續單元格中找到的內容。
我懷疑這種行爲來自表視圖重複使用單元格,但我仍然無法弄清楚。
代碼片段:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
switch ([indexPath row]) {
case 0:
cell.contentView.backgroundColor = [UIColor blackColor];
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
break;
case 1:
cell.contentView.backgroundColor = [UIColor blackColor];
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
break;
default:
cell.contentView.backgroundColor = [UIColor blackColor];
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
UILabel *rowLabel = [[UILabel alloc] initWithFrame:CGRectMake(25, 30, 200, 30)];
rowLabel.text = [NSString stringWithFormat:@"Row %d", [indexPath row]-1];
rowLabel.backgroundColor = [UIColor blackColor];
rowLabel.textColor = [UIColor whiteColor];
[rowLabel setFont:[UIFont fontWithName:@"GillSans-Bold" size:18]];
[cell.contentView rowLabel]; [rowLabel release];
UIButton *aButton = [[UIButton alloc] initWithFrame:CGRectMake(100, 50, 40, 40)];
[aButton setImage:anImage forState:UIControlStateNormal];
[cell.contentView addSubview:aButton];
[aButton release];
break;
}
return cell;
}
我可能找到了我的解決方案。我採取了使用唯一重用標識符的建議。我爲每個細胞都做了這個。而且,我將開關盒移到了if中。當stackoverflow允許我發佈我的答案! – tommi
這不是正確的解決方案,您應該儘可能重複使用單元格,否則您的滾動可能會非常緩慢。 – jrturton
@ jrturton,謝謝你讓我知道!當你指重用時,你的意思是重用單元內的每一件事物(包括按鈕,圖像)? – tommi