Нужно ли называть супер в viewWillAppear?
Я пытаюсь понять сценарий вызова методов для просмотра сделал / появится и исчезнет.
Я выбрал ячейку таблицы (выделение серым цветом), перешел к подробному виду, вернулся и отменил выбор выделенной строки (удалите выделенную ячейку серого цвета).
Вот мои методы:
-(void)viewDidAppear:(BOOL)animated {
DLog(@"%@ did appear", self);
[super viewDidAppear:animated];
if (_isPushed) {
[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
_isPushed=NO;
}
}
-(void)viewWillAppear:(BOOL)animated {
DLog(@"%@ will appear", self);
[super viewWillAppear:animated]; //If I remove this super call , then it works fine and there is no delay in deselecting the table cell
}
-(void)viewWillDisappear:(BOOL)animated {
DLog(@"%@ will disappear", self);
[super viewWillDisappear:animated];
}
-(void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
_isPushed=YES;
}
Итак, когда я ставлю точку останова, поток выглядит так:
без супер звонка:
пока толкаю на новый ВК:
current viewWillDisappear //makes sense
new viewWillAppear //makes sense
current viewDidAppear // doesnt make sense , y this should get called as the view is already appeared?
current viewWillDisappear // make sense
current viewDidDisappear //make sense
new viewDidAppear //make sense
возвращаясь из толкаемого ВК:
current viewWillDisappear
new viewDidDisappear
current viewDidDisappear
new viewDidAppear
с супер звонком:
пока толкаю на новый ВК:
current viewWillDisappear
new viewWillAppear
current viewDidAppear
current viewWillDisappear
current viewDidDisappear
new viewDidAppear
возвращаясь из задвинутого ВК:
current viewWillDisappear
new viewDidDisappear
current viewDidDisappear
new viewDidAppear
Поток почти такой же, я использую Super Call или нет. Но проблема, с которой я сталкиваюсь, заключается в том, что когда я использую супер-вызов в viewWillAppear, происходит задержка (около>1 секунды) при деселектировании ячейки.
Если я не использую супер-вызов в viewWillAppear, отсрочка не происходит, и ячейка деселектируется (около <0,5 секунд)
Я не уверен, использовать супер вызов или нет.
Может кто-нибудь сказать мне, почему происходит задержка отмены выбора ячейки?
3 ответа
Да, в документации указано, что вы должны:
обсуждение
Этот метод вызывается до того, как представление получателя собирается добавить в иерархию представления, и до того, как какие-либо анимации будут настроены для отображения представления. Вы можете переопределить этот метод для выполнения пользовательских задач, связанных с отображением представления. Например, вы можете использовать этот метод для изменения ориентации или стиля строки состояния, чтобы согласовать с ориентацией или стилем представляемого представления. Если вы переопределите этот метод, вы должны вызвать
super
в какой-то момент в вашей реализации.
Вообщем да, звоните super
, Я видел странные вещи, происходящие в контроллерах навигации, когда я забываю.
В этом случае, если у вас есть UITableViewController, попробуйте использовать его clearsSelectionOnViewWillAppear
флаг, чтобы очистить выбор для вас.