我的UITableView
有一个奇怪的问题...我为每个单元格添加了一个UIButton
作为子视图,但是当任何单元格看不见时会发生一些事情,当我滚动时再次,我可以看到一些细胞的UIButton
背景图像重叠!
我使用的cellForRowAtIndexPath
方法包含以下代码,其中添加了UIButton
个实例
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell"];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:@"MyCell"];
[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
UIFont *titleFont = [UIFont fontWithName:@"Arial-BoldMT" size:14.0];
[[cell textLabel] setFont:titleFont];
[cell autorelease];
}
if([cell viewWithTag:indexPath.row]==nil){
UIButton *buttonLeft = [UIButton buttonWithType:UIButtonTypeCustom];
buttonLeft.tag=indexPath.row;
if ([[myArray objectAtIndex:indexPath.row] isEqualToString:@"item1"]) {
[buttonLeft addTarget:self action:@selector(doThat:) forControlEvents:UIControlEventTouchUpInside];
[buttonLeft setBackgroundImage:[UIImage imageNamed:@"item1.png"] forState:UIControlStateNormal];
[buttonLeft setFrame: CGRectMake( 5.0f, 6.2f, 30.0f, 30.0f)];
}else{
[buttonLeft addTarget:self action:@selector(doThat:) forControlEvents:UIControlEventTouchUpInside];
[buttonLeft setBackgroundImage:[UIImage imageNamed:@"item2.png"] forState:UIControlStateNormal];
[buttonLeft setFrame: CGRectMake( 5.0f, 6.2f, 30.0f, 30.0f)];
}
[cell addSubview:buttonLeft];
}
cell.textLabel.text=[NSString stringWithFormat:@" %@",[myArray objectAtIndex:indexPath.row]];
return cell;
}
显然,出于某种原因,此代码会在每次显示单元格时添加UIButton。我希望每个按钮子视图只添加一次.. 我做错了什么?
非常感谢您的帮助
答案 0 :(得分:4)
这是因为表视图出于性能原因重用单元格。因此,正确实现的cellForRowAtIndexPath:
方法会返回已存在的单元格,如果没有可重用的单元格,则只会创建一个新单元格。
将所有与按钮相关的代码放在if (cell == nil) {}
中,以便该按钮仅添加到“新鲜”单元格中,它应该可以正常工作!