Кнопка в tableviewcell не отображается/скрывается, как ожидалось, при прокрутке

У меня есть tableview с tableviewcell, установленным на Custom в раскадровке. У меня есть 1 кнопка справа от каждой ячейки (кнопка в ячейке).

при загрузке каждой ячейки, в зависимости от условия, эта кнопка должна показывать или скрывать. Но это не работает, как ожидалось. Когда я прокручиваю вниз и снова прокручиваю вверх, теперь отображаются кнопки, которые ранее были скрыты (с правильным условием).

Я делаю то же самое с изображением в ячейке, и изображение загружается правильно даже при прокрутке.

Вот мой код

- (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;
}

В моей раскадровке эта кнопка в ячейке прототипа также скрыта.

Я прочитал много вопросов и ответов по этому вопросу.

  • во-первых, это подпредставление UIButton в UITableViewCell не скрывает, как ожидалось. Но у меня уже есть пользовательская ячейка (установленная в раскадровке).
  • еще один: iPhone TableViewCell - добавление и удаление кнопки с условием . Но для этого нужно создать кнопку в блоке if (cell == nil), которую я не использую. Потому что, если я использую, все остальные мои вещи (метки, изображения, которые добавляются в пользовательскую ячейку через раскадровку) не отображаются. И я действительно хочу использовать раскадровку вместо того, чтобы программно добавлять элементы через блок «if (cell == nil)».
  • и другие... но пока никто не работал.

У меня также есть другие вещи, такие как изображение в каждой ячейке. И изображения загружаются правильно, даже при прокрутке вверх/вниз.

Может кто-нибудь помочь, пожалуйста? Большое спасибо!

**** РЕДАКТИРОВАТЬ 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

Код для ячейкиForRowAtIndexPath

- (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;
}

person Joseph P.    schedule 18.01.2013    source источник


Ответы (1)


Мне удалось решить свою проблему с помощью этого метода: http://www.techotopia.com/index.php/Using_Xcode_Storyboards_to_Build_Dynamic_TableViews_with_Prototype_Table_View_Cells. Видимо, я недостаточно старался из-за всего чтения/гугления (я думаю, слишком устал). Поэтому я решил попробовать создать подкласс своей ячейки на основе упомянутой ссылки. Оно работает! (решение опубликовано в моем исходном посте).

person Joseph P.    schedule 19.01.2013