0

私のiPhoneアプリには、オブジェクトの「isConfirmed」値がtrueの場合にセルに目盛り画像を追加するテーブルビューがあります。詳細ビューに入ると、確認済みの値を編集できます。メイン テーブル ビューに戻ると、メイン テーブルを新しいものから表示するときだけでなく、更新を確認する必要があります。

だから私は自分のtableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPathメソッドでこのコードを使用しています`:

UIImageView *tickImg = nil;

    //If confirmed add tick to visually display this to the user
    if ([foodInfo.isConfirmed boolValue])
    {
        tickImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ConfirmedTick.png"]];
        [tickImg setFrame:CGRectMake(0, 0, 32, 44)];
        [cell addSubview:tickImg];
    }
    else 
    {
        [tickImg removeFromSuperview];
    }

これにより、真の値を持つセルに目盛り画像が正常に追加isConfirmedされ、オブジェクトの詳細ビューに移動してTRUEに設定して再調整すると、目盛りが表示されますが、動作させることができません他のので、ダニがそこにあり、詳細ビューに入って未確認にすると、ダニは消えません。

4

2 に答える 2

1

[foodInfo.isConfirmed boolValue]が false の場合に実行されるコードは次のとおりです。

UIImageView *tickImg = nil;
[tickImg removeFromSuperview];

明らかにこれは機能しません - tickImg は UIImageView を指していません。UIImageViewへの参照を何らかの方法で保存する必要があります。クラスのヘッダーに tickImg 変数を追加するか、プロパティなどにすることができます。

于 2012-04-03T22:12:42.747 に答える
0

[self.tableView reloadData]; を呼び出していますか? VC の viewWillAppear:?

また、セルを構成するために使用しているアプローチはエラーが発生しやすいものです。tableView はセルを再利用しているため、セルをデキューしたときにセルがどのような状態にあるかはわかりません。

より良いアプローチは、セルを一貫して構築することです。

static NSString *CellIdentifier = @"MyCell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    // always create a tick mark
    UIImageView *tickImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ConfirmedTick.png"]];
    tickImg.tag = kTICK_IMAGE_TAG;
    tickImg.frame = CGRectMake(0, 0, 32, 44);
    [cell addSubview:tickImg];
}

// always find it
UIImageView *tickImg = (UIImageView *)[cell viewWithTag:kTICK_IMAGE_TAG];

// always show or hide it based on your model
tickImg.alpha = ([foodInfo.isConfirmed boolValue])? 1.0 : 0.0;

// now your cell is in a consistent state, fully initialized no matter what cell
// state you started with and what bool state you have
于 2012-04-03T22:12:43.527 に答える