滚动时,tableviewcell中的按钮不会按预期显示/隐藏

时间:2013-01-18 19:31:08

标签: objective-c cocoa-touch uitableview ios6

我有一个tableview,其中tableviewcell在Storyboard中设置为Custom。我在每个单元格的右下方有一个按钮(单元格中的按钮)。

加载每个单元格时,根据条件,该按钮应显示或隐藏。但它没有按预期工作。当我向下滚动并再次向上滚动时,之前隐藏(具有正确条件)的按钮现在正在显示。

我对单元格中的图像执行相同操作,即使在滚动时也正确加载图像。

这是我的代码

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"cell1";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    UIButton *btnCall = (UIButton *) [cell viewWithTag:5];
    UIImageView *imgIcon = (UIImageView *) [cell viewWithTag:6];
    [btnCall setHidden:TRUE];


    if (... some condition ...) {
        [btnCall setHidden:false];
        [imgIcon setImage:[UIImage imageNamed:@"icon1.png"]]; // load correctly
    } else {
        [btnCall setHidden:true]; // doesn't seem to work consistently.
        [imgIcon setImage:[UIImage imageNamed:@"icon2.png"]]; // load correctly
    }

    return cell;
}

在我的故事板中,原型单元格中的此按钮也设置为隐藏。

我已经阅读了很多关于这个问题的问题和答案。

我还有其他东西,比如每个单元格中的图像。即使向上/向下滚动,图像也能正确加载。

有人可以帮忙吗?非常感谢!

****编辑1 - 问题已解决! ****

我将我的单元格子类化,以便我的重置更合适。这是它的完成方式(我用图像替换上面的按钮 - 保持它作为按钮应该也可以正常工作):

    @implementation PSCellMyTableViewCell

    @synthesize imgView1 = _imgView1, imgView2 = _imgView2;


    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
    {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
        self.imgView1.image = nil;
        self.imgView2.image = nil;
    }
    return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

@end

cellForRowAtIndexPath的代码

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"cell1";
    PSCellMyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (... some condition ...) {
        [cell.imgView1 setImage:[UIImage imageNamed:@"icon-1.png"]];// no longer using tag
        [cell.imgView2 setImage:[UIImage imageNamed:@"icon-12.png"]]; // no longer using tag

    } else {
        [cell.imgView1 setImage:[UIImage imageNamed:@"icon-2.png"]];// no tag
        [cell.imgView2 setImage:[UIImage imageNamed:@"icon-22.png"]]; // no tag
    }

    return cell;
}

1 个答案:

答案 0 :(得分:0)

我设法使用这种方法解决了我自己的问题:http://www.techotopia.com/index.php/Using_Xcode_Storyboards_to_Build_Dynamic_TableViews_with_Prototype_Table_View_Cells。显然,我没有在所有的阅读/谷歌搜索中努力(我猜太累了)。所以我决定尝试根据上面提到的引用对我的单元格进行子类化。有用! (解决方案发布在我原来的帖子中)。