0

私のアプリは3つのビュー(ビュー1(Tableview1)、ビュー2(Tableview2)、ビュー3(DetailView))で構成されています。

ビュー2(Tableview2)にサブビュー(imageViewsとLabels)を使用してカスタムテーブルビューセルを設定しています。

これらのサブビューの1つはImageViewであり、セルIDがお気に入りの配列にある場合は画像が含まれます。cellForRowAtIndexpathを選択すると、新しいビュー(View 3(DetailView))に移動し、ボタンを押してアイテムをお気に入りにすることができます。そのビューを閉じて戻ると、画像が表示され、すべてが正常に機能します。

アイテムをお気に入りとして選択解除しようとすると、問題が発生します。ビュー1(Tableview1)に戻るまで、お気に入りのシンボルは引き続きtableViewに表示されます。

ViewWillAppearのビュー2で[myTableviewreloadData]を呼び出そうとしましたが、お気に入りのシンボルがまだあります。私のお気に入りの配列が保存され、正しい値がロードされます。

配列はViewWillAppearで更新されます...

何が問題なのですか?

関連コード:編集-cellForRowAtIndexPathからすべての関連コードを投稿しました:すべてが正しく表示されていますが、カスタムセルから画像を削除してもテーブルビューが更新されません...編集:forループのelseステートメントで更新して削除を試みますお気に入りの配列に含まれなくなったアイテムのお気に入りの画像。編集編集編集:今作業中、forループにbreakステートメントを追加しました...他の人に役立つようにコードを更新しました...

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";
CustomCell *cell = (CustomCell *)[myTableView dequeueReusableCellWithIdentifier:CellIdentifier];




if (cell == nil) {
        cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }

[cell setAccessoryType: UITableViewCellAccessoryDisclosureIndicator];

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

NSString *kategori = [prefs objectForKey:@"kategoriID"];

NSLog(@"KategoriID = %@", kategori);

rowArray = nil;

rowArray = [[NSMutableArray alloc] init];

for(int i=0; i < [listOfItems count]; i++) {

    if([kategori isEqualToString:[listOfItems objectAtIndex:i]])
    {
        //Tilføjer ID
         [rowArray addObject:[NSNumber numberWithInt:i-5]];



    }

}



int arrayValue = [[rowArray objectAtIndex:indexPath.row] intValue];

cell.primaryLabel.text = [listOfItems objectAtIndex:arrayValue+1];
cell.secondaryLabel.text = [listOfItems objectAtIndex:arrayValue+2];
cell.myImageView.image = [UIImage imageNamed:[listOfItems objectAtIndex:arrayValue+4]];


//Time
cell.timeImageView.image = [UIImage imageNamed:@"03-clock.png"];
cell.timeLabel.text = [listOfItems objectAtIndex:arrayValue+6];

//Views
cell.viewsImageView.image = [UIImage imageNamed:@"04-eye.png"];
cell.viewsLabel.text = [listOfItems objectAtIndex:arrayValue+7];


//Stars
NSString *starsString = [listOfItems objectAtIndex:arrayValue+8];


if ([starsString isEqualToString:@"S0"]) {
     cell.starsImageView.image = [UIImage imageNamed:@"0-stars.png"];
}
if ([starsString isEqualToString:@"S0_1"]) {
    cell.starsImageView.image = [UIImage imageNamed:@"0_1-stars.png"];
}
if ([starsString isEqualToString:@"S1"]) {
    cell.starsImageView.image = [UIImage imageNamed:@"1-stars.png"];
}
if ([starsString isEqualToString:@"S1_1"]) {
    cell.starsImageView.image = [UIImage imageNamed:@"1_1-stars.png"];
}
if ([starsString isEqualToString:@"S2"]) {
    cell.starsImageView.image = [UIImage imageNamed:@"2-stars.png"];
}
if ([starsString isEqualToString:@"S2_1"]) {
    cell.starsImageView.image = [UIImage imageNamed:@"2_1-stars.png"];
}
if ([starsString isEqualToString:@"S3"]) {
    cell.starsImageView.image = [UIImage imageNamed:@"3-stars.png"];
}
if ([starsString isEqualToString:@"S3_1"]) {
    cell.starsImageView.image = [UIImage imageNamed:@"3_1-stars.png"];
}
if ([starsString isEqualToString:@"S4"]) {
    cell.starsImageView.image = [UIImage imageNamed:@"4-stars.png"];
}
if ([starsString isEqualToString:@"S4_1"]) {
    cell.starsImageView.image = [UIImage imageNamed:@"4_1-stars.png"];
}
if ([starsString isEqualToString:@"S5"]) {
    cell.starsImageView.image = [UIImage imageNamed:@"5-stars.png"];
}

//favorite
NSString *IDString = [listOfItems objectAtIndex:arrayValue];

NSLog(@"ID String: %@", IDString);

if (videoerIFavoritDatabase == 0) {
    NSLog(@"Der er ingen videoer i favorit databasen!");
}

else {

 for(int i=0; i < [tableviewFavoritArray count]; i++) {

     NSLog(@"ID Array Value:%i", i);

     if([IDString isEqualToString:[tableviewFavoritArray objectAtIndex:i]])
{

    cell.favoriteImageView.image = [UIImage imageNamed:@"favoriteTableview@2x.png"];
    NSLog(@"ER favorit:%i = ID%@", i, [tableviewFavoritArray objectAtIndex:i]);
break;
}
    else { cell.favoriteImageView.image = [UIImage imageNamed:@"empty.png"];
break;

 }
     }
    }


return cell;



 }
4

1 に答える 1

1

if (cell == nil)ステートメント内ですべてのセル構成を行います。このコードは、tableViewがdequeueメソッドからセルを返さなかった場合にのみ実行されます。おそらく発生しているのは、セルを再利用していて、セルが構成されていないため、データと外観は同じままであるということです。

メソッドcellForRowAtIndexPathの構造は次のとおりです。

  • セルをデキューしてみてください
  • セルが返されない場合は、新しいセルを作成し、ベースライン構成を行います(これはif (cell == nil)ステートメント内の部分です)
  • 行に合わせてセル(デキューされたセルまたは新しいセル)を適切に構成します。ここで作業しているセルは、新しいセルまたは以前に使用されたセルである可能性があることに注意してください。

OK、更新されたコードに基づくと、問題はお気に入りの画像を設定しているように見えますが、セルがお気に入りでなくなった場合は設定を解除しないでください。elseセルがお気に入りでない場合は、その画像をnilに設定する必要があります。

于 2011-09-21T12:33:01.120 に答える