Нужно ли называть супер в 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 флаг, чтобы очистить выбор для вас.

Да надо писать супер.

Другие вопросы по тегам