2013-05-22 2 views
1

У меня есть динамическая таблица, в которой пользователь может добавить & удалить данные. В таблице отображается список покупок. Если совершение покупок закончен, пользователь должен иметь возможность отмечать нужный элемент, а также иметь возможность отключиться, я достиг этого, установив для него кнопку аксессуара. Однако проблема возникает, когда я удаляю строку из нее, ячейка удаляется, но прикрепленная к ней ячейка остается в том же состоянии.Сохранение состояния вида аксессуаров в ios

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    cell = [tableView cellForRowAtIndexPath:indexPath]; 
    if (cell.accessoryView == nil) 
    {  
    cell.accessoryView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tick_btn"]]; } else { cell.accessoryView = nil; 
    } 
} 
+1

пожалуйста показать ур код – manujmv

+0

'- (Недействительными) Tableview: (UITableView *) Tableview didSelectRowAtIndexPath: (NSIndexPath *) indexPath {cell = [tableView cellForRowAtIndexPath: indexPath]; , если (cell.accessoryView == ноль) { cell.accessoryView = [[UIImageView Alloc] initWithImage: [UIImage imageNamed: @ "tick_btn"]]; } прочее { cell.accessoryView = nil; } } ' – JgdGuy

ответ

0

Поскольку UITableView «s обычно многократно экземпляры UITableViewCell-х, вы должны обеспечить ваш '-tableView:cellForRowAtIndexPath: метод правильно устанавливает все атрибуты ячейки. Остальные устаревшие данные могут сохраняться. Я предполагаю, что это может быть вашей проблемой, не имея полного взгляда на ваш код.

Так, что-то вроде этого:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString* cellIdentifier = @"TheCellIdentifier"; 
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
    } 

    ShoppingObject* shopping = [self.myShoppingList objectAtIndex:indexPath.row]; 
    UIImageView* accessoryView = nil; 

    if (shopping.isDone) { 
     accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tick_btn"]]; 
    } 

    cell.accessoryView = accessoryView; 

    return cell; 
} 

Он получает ячейку, либо из кэша повторного использования или создания нового. Затем он проверяет состояние вашей модели данных, чтобы убедиться, что если совершение покупок или нет для объекта, представленного в этой строке, и если совершение покупок завершено, вы получите свое изображение. Обратите внимание, что совершение покупок не выполняется, нет созданного аксессуарного вида, поэтому, независимо от того, какое состояние объекта ShoppingObject будет представлено в этой строке таблицы, аксессуар для этой ячейки будет установлен правильно.

Так что, что я, вероятно, тогда сделал бы в вашем -tableView:didSelectRowAtIndexPath:, было бы просто -reloadData на столе, чтобы обеспечить правильное обновление.

+0

Хорошо, что нет способа проверки покупок или нет, его выбор пользователя поставить галочку, если он выполнит задачу, указанную в списке покупок. Я имею в виду, что я не могу определить галочку, которую нужно отобразить, ее нужно отобразить, если выбрана строка. – JgdGuy

+0

Итак, что отслеживает ваши данные? Сам GUI? – hsoi

+0

пользователь может добавить n удалить случайные вещи в свой список. Я сделал с покупками, он/она shud сможет поставить галочку на нем. – JgdGuy

0

Вы должны следить за выбранных элементов

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    cell = [tableView cellForRowAtIndexPath:indexPath]; 
    if (cell.accessoryView == nil) 
    {  
    cell.accessoryView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tick_btn"]]; 
    [self.checkedIndexPaths addObject:indexPath]; 
    } 
    else { 
    cell.accessoryView = nil; 
    [self.checkedIndexPaths removeObject:indexPath]; 
    } 

} 

Редактировать

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

// Do other stuffs 

cell.accessoryView = nil; 

if ([self.checkedIndexPath containsObject:indexPath]) { 
    cell.accessoryView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tick_btn"]]; 
    } 

} 
+0

Что такое checkIndexPath? – JgdGuy

+0

только NSMutaleArray для хранения indexPath из выбранных элементов –

+0

не помогает :(опробовал ..! – JgdGuy

Смежные вопросы