В раскадровке у меня есть контроллер корневого представления с кнопкой, которая запускает "Present as Popover" в UINavigationController, содержащий UITableViewController. Я хочу, чтобы навигационный контроллер присутствовал как на iPhone, так и на iPad.
На iPad это отлично работает в popover.
На iPhone я получаю модальную презентацию, поэтому теперь мне нужно добавить дополнительную кнопку панели, чтобы отклонить модальное представление. От просмотра видео WWDC я попытался выполнить следующие действия в контроллере корневого представления:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
UIViewController *vc = segue.destinationViewController;
vc.popoverPresentationController.delegate = self;
}
- (void)dismissPopover {
[self dismissViewControllerAnimated:YES completion:nil];
}
- (UIViewController *)presentationController:(UIPresentationController *)controller viewControllerForAdaptivePresentationStyle:(UIModalPresentationStyle)style {
UINavigationController *nvc = (UINavigationController *)controller.presentedViewController;
UIBarButtonItem *bbi = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(dismissPopover)];
nvc.topViewController.navigationItem.leftBarButtonItem = bbi;
return nvc;
}
Я понимаю, что метод -presentationController:viewControllerForAdaptivePresentationStyle:
должен вызываться только тогда, когда пользовательский интерфейс является адаптивным, т.е. модальным, однако он вообще не называется вызываемым, даже если он работает как модальный на iPhone.