我面临着一个至高无上的问题,导致我差点把我的电脑扔到窗外。 我正在尝试仅在某些单元格上创建一个按钮,我对触发动作没有任何问题,但是当我向下滚动表格并回到第一个单元格时,按钮在其他单元格上创建。换句话说,如果单元格1和3应该具有按钮,则在创建表格视图时,它们是唯一具有按钮的表格视图。当我再次向下滚动时,单元格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"]);
}
非常感谢你的帮助!
答案 0 :(得分:1)
这是UITableView
的典型问题。我花了很长时间才弄清楚表格视图的出列和重用过程。这是应该解决的问题。
移动代码以将按钮初始化为检查是否cell == nil
的部分。这是因为您不应该将子视图添加到刚刚出列的单元格中,因为您不知道该单元格是否已经添加了子视图。此外,您应该为按钮设置标记或使其成为OpinionCell
的属性。这样你以后可以访问它。
然后,如果您确定该按钮应该可见,请设置cell.replyButton.hidden = NO
或[cell viewWithTag:kMyButtonTag].hidden = NO
。 非常重要,您应将其设置为隐藏在else
子句中。否则,该按钮将显示在看似随机的单元格上。
希望这有帮助!
答案 1 :(得分:0)
您可以使用以下代码从UITableViewCell中删除子视图 单元格已出列或初始化,因为它将删除其所有子视图,或者您可以按照上面提到的dado728进行操作。
[[cell subviews] performSelectorOnMainThread:@ selector(removeFromSuperview)withObject:nil waitUntilDone:NO];