iOS - 在UITableView的选定单元格中的UIButton

时间:2013-06-28 20:42:07

标签: ios uitableview uibutton

我面临着一个至高无上的问题,导致我差点把我的电脑扔到窗外。 我正在尝试仅在某些单元格上创建一个按钮,我对触发动作没有任何问题,但是当我向下滚动表格并回到第一个单元格时,按钮在其他单元格上创建。换句话说,如果单元格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"]);
        }

非常感谢你的帮助!

2 个答案:

答案 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];