Если вы перетащите край UIViewController
, чтобы начать интерактивный поп-переход внутри UINavigationController
, UIViewController
под током будет вызван viewWillAppear:
, за которым следует метод UINavigationControllerDelegate
navigationController:willShowViewController:animated:
.
Если вы отменяете переход (т.е. перетаскиваемый контроллер помещается обратно туда, где он был и не извлекается), viewWillAppear:
и viewDidAppear:
вызываются на контроллере вида сверху, как и ожидалось, но методы делегата navigationController:willShowViewController:animated:
и navigationController:didShowViewController:animated:
не отображаются. "т. Кажется, что по крайней мере один или оба из них должны быть вызваны, учитывая, что методы жизненного цикла представления UIViewController
вызваны. Мне интересно, является ли это преднамеренным или ошибка в UINavigationController
.
Что мне действительно нужно, так это уметь видеть, когда интерактивная популярность отменяется, либо в моем подклассе UINavigationController
, либо в его UINavigationControllerDelegate
. Есть ли очевидный способ сделать это?
редактировать
Я все еще ищу решение этой проблемы, но хотел бы отметить, что я сообщил об этой проблеме как об ошибке в Apple. Глядя на документацию, нет причин, по которым эти методы делегата не должны вызываться, особенно если учесть, что методы жизненного цикла эквивалентного представления ДОЛЖНЫ вызываться.
edit2
Мой радарный билет (16823313) был закрыт сегодня (21 мая 2015 года) и помечен как задумано. :(
Инжиниринг установил, что эта проблема ведет себя как задумано на следующую информацию:
Это на самом деле правильное поведение. Навигационный переход что происходит из B → A, если вы отмените его в середине перехода, вы не получит didShowViewController: метод. Отмена этого переход не должен рассматриваться как переход от A → B, потому что Вы никогда не достигли А.
view [Will/Did] Появление должно все еще называться как ожидалось.
Это довольно обидно, так как это нелогично, но обходной путь в моем ответе ниже должен хорошо работать в обозримом будущем, по крайней мере, для моего варианта использования.