2014-10-18 6 views
1

Так что у меня действительно странная проблема. Мой код отлично работает на iOS 8, но не на iOS 7, и я не могу понять, почему.UITableViewCell не обновляется после выбора на iOS 7

У меня есть таблица, в которой есть список элементов, которые при выборе элемента галочка добавляются к этому элементу, и если вы выберете его снова, галочка будет удалена. Довольно просто? : -p Как я уже сказал, он отлично работает на iOS 8, но когда я запускаю против iOS 7.1, подсветка ячейки добавляет галочку и удаляет старый заголовок и заменяет его по умолчанию Заголовок. Впоследствии, независимо от того, сколько раз я нажимаю на ячейку, она никогда не изменяется (но базовые данные меняются).

перед выбором Before Selection

После выбора After Selection

Если я выйти из экрана и вернуться к нему, строки отображаются правильно. Я проверил, что cellForRowAtIndexPath вызывается, и правильные значения добавляются в ячейку.

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    // Return the number of sections. 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    // Return the number of rows in the section. 
    return [[parkFinderSingleton.data valueForKey:@"amenities"] count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"amenityFilterCell" forIndexPath:indexPath]; 

    Amenity *currentAmenity; 
    NSArray *amenities = [parkFinderSingleton.data valueForKey:@"amenities"]; 


    if (amenities != nil) { 
     currentAmenity = amenities[indexPath.row]; 
     cell.textLabel.text = currentAmenity.amenityTitle; 
     NSLog(@"Cell Title %@", cell.textLabel.text); 

     if (currentAmenity.amenitySelected) { 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
     } else { 
      cell.accessoryType = UITableViewCellAccessoryNone; 
     } 
    } 

    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"amenityFilterCell" forIndexPath:indexPath]; 

    Amenity *currentAmenity; 
    NSArray *amenities = [parkFinderSingleton.data valueForKey:@"amenities"]; 

    if (amenities != nil) { 
     currentAmenity = amenities[indexPath.row]; 

     if (currentAmenity.amenitySelected) { 
      currentAmenity.amenitySelected = NO; 
      cell.accessoryType = UITableViewCellAccessoryNone; 
     } else { 
      currentAmenity.amenitySelected = YES; 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
     } 
    } 

    [self.tableView beginUpdates]; 
    [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; 
    [self.tableView endUpdates]; 

} 

Любые мысли относительно того, что может произойти?

ответ

2

Обычно dequeueReusableCellWithIdentifier:forIndexPath: не следует называть в tableView: didSelectRowAtIndexPath:. Если вам нужна ячейка для определенного индекса, используйте [tableView cellForRowAtIndexPath:indexPath].

Для:

[self.tableView beginUpdates]; 
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; 
[self.tableView endUpdates]; 

Если вы просто хотите, чтобы отменить выбор ячейки, используйте [tableView deselectRowAtIndexPath:animated:].

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