0

ストーリーボードで 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;
}

私のストーリーボードでは、プロトタイプ セルのこのボタンも非表示に設定されています。

この問題に関する多くの質問と回答を読みました。

  • 1つは、UITableViewCellのこのUIButtonサブビューが期待どおりに非表示にならないことです。しかし、私のものはすでにカスタムセルです(ストーリーボードに設定されています)。
  • もう 1 つ: 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

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

1 に答える 1