1

我正面临一个最重要的问题,导致我差点把我的电脑扔出窗外。我正在尝试仅在某些单元格上创建一个按钮,触发该操作没有任何问题,但是当我向下滚动表格并返回第一个单元格时,该按钮是在其他单元格上创建的。换句话说,如果单元格 1 和 3 应该有按钮,那么当创建 tableview 时,它们是唯一有按钮的单元格。当我再次向下和向上滚动时,单元格 2、3 和 4 也有按钮(没有特定规则)。该按钮也可以正常工作,但它不应该在那里!

static NSString *CellIdentifier = @"Cell";
    OpinionCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
    cell= [[OpinionCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

...一些有影响的代码.......

if(([[aComment objectForKey:@"TypeMsg"] intValue]==310)&&([[parentMessage objectForKey:@"TypeMsg"] intValue]==310)){
            UIButton *_openReplyButton = [[UIButton alloc] initWithFrame:CGRectMake(280, 5, 20, 20)];
            [_openReplyButton setImage:[UIImage imageNamed:@"reply_button.png"] forState:UIControlStateNormal];
            [_openReplyButton addTarget:self action:@selector(addRowsForShowReply:) forControlEvents:UIControlEventTouchUpInside];
            [cell addSubview:_openReplyButton];
            NSLog(@"%@", [aComment objectForKey:@"Message"]);
        }

非常感谢您的帮助!

4

2 回答 2

1

这是一个经典的问题UITableView。我花了很长时间才弄清楚表格视图所做的出列和重用过程。这是应该解决的问题。

将初始化按钮的代码移动到检查是否cell == nil. 这是因为您不应该将子视图添加到刚刚出列的单元格,因为您不知道该单元格是否已经添加了子视图。此外,您应该为按钮设置标签或使其成为OpinionCell. 这样您以后可以访问它。

然后,如果您确定该按钮应该可见,请设置cell.replyButton.hidden = NO[cell viewWithTag:kMyButtonTag].hidden = NO非常重要的是,您应该将其设置为隐藏在else子句中。否则,该按钮将显示在看似随机的单元格上。

希望这可以帮助!

于 2013-06-28T20:54:12.820 回答
0

您可以使用以下代码在单元格出列或初始化后立即从 UITableViewCell 中删除子视图,因为它将删除其所有子视图,或者您可以按照上面提到的 dado728 进行操作。

[[单元子视图] performSelectorOnMainThread:@selector(removeFromSuperview) withObject:nil waitUntilDone:NO];

于 2013-06-28T21:23:19.677 回答