Проблема с пользовательской ячейкой Tableview - PullRequest
0 голосов
/ 21 сентября 2011

Мое приложение состоит из 3 представлений (Вид 1 (Tableview1), Вид 2 (Tableview2), Вид 3 (DetailView)).

У меня есть настраиваемая ячейка таблицы, настроенная с подпредставлениями (imageViews и Labels)в моем представлении 2 (Tableview2).

Одним из этих подпредставлений является ImageView, и оно содержит изображение, если идентификатор ячейки находится в избранном массиве.Когда вы выбираете cellForRowAtIndexpath, вы перемещаетесь в новое представление (представление 3 (DetailView)), где вы можете нажать кнопку и сделать элемент избранным.Когда вы закрываете этот вид и возвращаетесь назад, изображение показывается, и все работает нормально.

Моя проблема возникает, когда я пытаюсь отменить выбор элемента в качестве избранного.Любимый символ по-прежнему отображается в табличном представлении, пока я не вернусь к представлению 1 (Tableview1).

Я попытался вызвать [myTableview reloadData] в представлении 2 в ViewWillAppear, но символ избранных все еще существует,Мое избранное сохранено и загружено с правильными значениями.

Массив обновляется в ViewWillAppear ...

В чем может быть проблема?

Соответствующий код: РЕДАКТИРОВАТЬ -Разместил весь соответствующий код из cellForRowAtIndexPath: все показывается правильно, но табличное представление не обновляется, если я удаляю изображение из пользовательской ячейки ... РЕДАКТИРОВАТЬ: Обновлено с помощью оператора else в цикле for, чтобы попытаться удалить избранные изображения изэлементы, которых больше нет в массиве избранного.РЕДАКТИРОВАНИЕ РЕДАКТИРОВАНИЕ РЕДАКТИРОВАТЬ: Работая сейчас, добавил в мой цикл 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;



 }

1 Ответ

1 голос
/ 21 сентября 2011

Вы делаете всю конфигурацию своей ячейки внутри оператора if (cell == nil).Этот код выполняется только в том случае, если tableView не вернул ячейку из метода dequeue.Вероятно, происходит то, что вы повторно используете ячейки, а они не настраиваются, поэтому данные и внешний вид остаются прежними.

Ваш метод cellForRowAtIndexPath должен иметь следующую структуру:

  • Попробуйте удалить из очереди ячейку
  • Если ячейка не была возвращена, создайте новую ячейку и выполните любые действия.базовая конфигурация (это часть вашего оператора if (cell == nil)
  • . Конфигурируйте ячейку (либо ячейку без очереди, либо вашу новую ячейку) соответствующим образом для строки. Имейте в виду, что ячейка, над которой вы работаете, может бытьсовершенно новая или ранее использовавшаяся ячейка.

ОК, в зависимости от вашего обновленного кода, проблема заключается в том, что вы устанавливаете избранное изображение, но выне unset , если ячейка больше не является избранной. Вам нужно else, чтобы установить для этого изображения значение nil, если ячейка не является избранной.

...