iPhone:根据故事板隐藏UITableViewCell中的附件按钮

时间:2012-02-28 16:06:25

标签: iphone objective-c ios uitableview

  • 我想要什么

    有一个tableview。我只想通过在TableViewCell中点击它来隐藏UIButtonTypeContactAdd附件。

  • 我的问题

    当我点击附件按钮A(我只在整个程序中轻敲)时,它正确隐藏。但是当我向下滚动桌面时,我发现另一个附件按钮B被隐藏得很可笑。将快速滚动到tableview的顶部后,按钮B guy又在那里,同时另一个按钮C隐藏了......

    遗憾的是我无法在我的帖子中放置图片。希望你能理解发生了什么。

  • 代码
        的tableView:的cellForRowAtIndexPath:

    static NSString *CellIdentifier = @"All Name Showing Table";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    if(!cell.accessoryView){
        UIButton *button = [UIButton buttonWithType:UIButtonTypeContactAdd];
        [button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
        cell.accessoryView = button;
    }
    

    - (IBAction)buttonTapped:(UIButton *)sender
    {
        UITableViewCell *tvc = (UITableViewCell *)[sender superview];
        NSString *peopleTapped = [NSString stringWithFormat:@"you have favored %@",tvc.textLabel.text];
        NSLog(@"%@",peopleTapped);

        sender.hidden = YES;
    }

所有这一切都是因为细胞再利用的机制吗?

抱歉我的英语不好 谢谢!

2 个答案:

答案 0 :(得分:1)

你不能这样使用表格。您应该有一个带有对象的数据模型,该对象存储按钮附件按钮状态。

static NSString *CellIdentifier = @"All Name Showing Table";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
if(!cell.accessoryView){
    UIButton *button = [UIButton buttonWithType:UIButtonTypeContactAdd];
    [button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
    cell.accessoryView = button;
}

Model *model = [_array objectAtIndex:indexPath.row];
button.tag = [_array indexOfObject:indexPath.row];
button.hidden = model.hidden;

....
}


- (IBAction)buttonTapped:(UIButton *)sender
{
 Model *model = [_array objectAtIndex:sender.tag];
 model.hidden = YES;
 [table reloadData];
}

像这样。

答案 1 :(得分:0)

是的,它正在发生,因为细胞重用。您需要能够跟踪tableview中的每个按钮,可能是通过将其与数据源对齐。这可以通过让您的单元数据源跟踪每个按钮的状态来轻松完成。