2014-11-03 7 views
0

До iOS 8 и Xcode 6 я смог использовать UITableViewController так же, как и настройки Apple для настройки моих приложений. Когда вы переходите с одной таблицы обратно в вызывающую таблицу, я перезагружаю вызывающую таблицу для обновления данных в ячейках, повторно выбираю вызывающую строку, а затем давайте анимировать представление, чтобы очистить выбор.Перезагрузка таблицы и выбор ячейки ячейки ячейки

Вот код в методе viewWillAppear я использую:

[self.tableView reloadData]; 
[self.tableView selectRowAtIndexPath:lastselected animated:YES scrollPosition:UITableViewScrollPositionNone]; 
[super viewWillAppear:animated]; 

В то время как данные клетки обновляются, славная медленно исчезновение выбранной строки/ячейки не происходит. Он эффективно очищается немедленно. Я пробовал все, о чем я могу думать, и не могу заставить это работать. Пожалуйста, помогите ...

Что изменилось и как я могу получить этот хороший переход назад?

спасибо.

ответ

0

viewWillAppear вызывается перед вашим видом на экране. Таким образом, вы не будете получать анимации, которые будут работать правильно, если они будут запущены внутри этого метода. Вместо этого используйте viewDidAppear, и вы должны увидеть более надежные анимации при переходе. Потенциально используйте performSelector с задержкой, если вы чувствуете, что это происходит слишком быстро.

Лично также, я бы назвал [super viewDidAppear:animated]; первым в этом случае. Я не вижу причины, почему это будет ниже других строк кода.

Кроме того, только так я быть 100% ясно ... viewWillAppear, очевидно, хорошо для перезагрузки Tableview так позволяет это сделать ...

-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [self.tableView reloadData]; 
} 


-(void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [self.tableView selectRowAtIndexPath:lastSelected animated:YES scrollPosition:UITableViewScrollPositionNone]; 
} 

Или с задержкой выполнения селектора на viewDidAppear ...

-(void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [self performSelector:@selector(animateCellSelectionAtIndexPath:) withObject:lastSelected afterDelay:0.2f]; 
} 

-(void)animateCellSelectionAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone]; 
} 
+0

спасибо. Это фактически не помогло, как вы планировали, но я смог заставить его работать, выполнив это: - (void) viewWillAppear: (BOOL) анимированный { [self.tableView reloadData]; [self.tableView selectRowAtIndexPath: lastselected animated: YES scrollPosition: UITableViewScrollPositionNone]; [self performSelector: @selector (animateCellSelectionAtIndexPath :) withObject: lastselected afterDelay: 0.05f]; } - (недействительными) animateCellSelectionAtIndexPath: (NSIndexPath *) indexPath { [self.tableView deselectRowAtIndexPath: indexPath анимированные: ДА]; } – SteveM

+0

В вашем коде комментария вы дважды вызываете вызов selectBowAtIndexPath. Вам не нужно, чтобы первый 'selectRowAtIndexPath' был только тот, который находится в селекторе выполнения с задержкой. Я был бы очень удивлен, если моя версия viewDidAppear не сработает, хотя я счастлив, что задержка в этом случае была разработана для вас ... как я уже сказал, вы не можете этого гарантировать, так как технически это неопределенная сумма времени до того, как он «появился». – Magoo

+0

Хорошая уловка .. это фактически deselectRowAtIndexPath, а не другой выбор. Копировать/Вставить ошибку. – SteveM

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