У меня может быть некоторое недопонимание относительно использования протокола UINavigationControllerDelegate.Вот моя ситуация:
У меня есть ViewController, назовем его BViewController, который может отображать PopoverViewController.BViewController является вторым ViewController в стеке NavigationContoller после AViewController.Мне нужно отклонить PopoverViewController, когда пользователь нажимает кнопку в BViewController, и приложение возвращает нас к предыдущему представлению - AViewController.
Для этого я реализовал в BViewController следующее:
- (void)viewWillDisappear:(BOOL)animated {
NSLog(@"BViewController will disappear");
// Check whether the popoverViewController is visible
if (self.popoverController.popoverVisible==YES) {
[self.popoverController dismissPopoverAnimated:NO];
}
}
Однако это не вызывается непосредственно платформой, поскольку BViewController находится внутри NavigationController.Следовательно, я регистрирую UINavigationControllerDelegate в своем NavigationController и реализую следующие два метода:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
// Pass the message on to the viewController in question
[viewController viewWillAppear:animated];
}
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
// Pass the message on to the viewController in question
[viewController viewWillDisappear:animated];
}
Однако, похоже, что переданный в viewController параметр в обоих методах - это тот, который собирается показать.Я бы ожидал, что второй метод дает мне доступ к тому, который вот-вот исчезнет.Таким образом, когда пользователь нажимает вышеупомянутую кнопку, viewWillDisappear вызывается на AViewController (который будет показан), а не на BViewController (который собирается исчезнуть).Это звучит правильно?В обоих случаях документация Apple ссылается на
Контроллер представления, для которого отображаются свойства вида и элементов навигации.
... что, я думаю, не совсем понятно,Спасибо за помощь, ребята.