Бутонът в клетката за изглед на таблица не се показва/скрива според очакванията при превъртане

Имам табличен изглед с tableviewcell, зададен на Custom в Storyboard. Имам 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;
}

В моя Storyboard този бутон в прототипната клетка също е настроен на скрит.

Прочетох много от въпросите и отговорите по този въпрос.

  • единият е този UIButton subview в UITableViewCell не се скрива според очакванията. Но моята вече е персонализирана клетка (зададена в Storyboard).
  • още един: iPhone TableViewCell - бутон за добавяне и премахване с условие . Но това изисква създаване на бутон в блока "if (cell == nil)", който не използвам. Защото, ако използвам, всичките ми други неща (етикети, изображения, които се добавят към персонализирана клетка чрез Storyboard) не се показват. И наистина искам да използвам сценария, вместо да добавям елементи програмно чрез блока "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

Код за 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;
}

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