2012-04-03 12 views
0

私のiPhoneアプリでは、そのオブジェクトの 'isConfirmed'値がtrueの場合、セルにティック画像を追加するテーブルビューがあります。詳細なビューを入力すると、確定値を編集することができます。メインテーブルビューにポップアップすると、メインテーブルを新しく表示するときだけでなく、更新を表示する必要があります。親ビューからの画像の削除

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

これは、それが成功したの詳細ビューに入るときisConfirmedための真の価値を持っているし、私の細胞にダニの画像を追加しない何
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]; 
    } 

をオブジェクトをTRUEに設定して再チンティングすると、ティックが表示されますが、他のものを動作させることはできません。ティックがあれば、ディテールビューに移動して確認しません。

私のお手伝いをさせていただきますよう、ありがとうございます。

答えて

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 
+0

あなたがインターフェイスビルダーでの画像表示がありますか?あなたがサブビューとして追加しないので。 –

+0

いいえ、私はそのアプローチに賛成ですが、あなたのコードはコードでイメージビューを構築することを示しているので、私はそれも私の答えで行いました。それを見ますか? – danh

+0

oops。私はそれをサブビューとして追加しませんでした。私の悪い。編集します。今すぐそのコードを試してみてください。私はそれがあなたが望むことをするだろうと思う。 – danh

1

これは[foodInfo.isConfirmed boolValue]がfalseの場合に実行されるコードです:

UIImageView *tickImg = nil; 
[tickImg removeFromSuperview]; 

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

関連する問題