Я использую UISplitViewController
внутри UITabBarController
с простой UIViewController
в главной панели разделенного вида и UINavigationController
в области сведений, которая сама содержит ваниль UIViewController
.
Мне известно, что Apple рекомендует использовать разделенные представления только на корневом уровне, однако я видел другие приложения (например, Amazon - вкладка «Список пожеланий»), которые используют разделенные представления на вкладках, поэтому я уверен, что это возможно.
Моя проблема заключается в том, что методы делегата разделенного представления, т.е.те, что в UISplitViewControllerDelegate
, не вызывают, что не позволяет мне создавать всплывающее меню при переключении в портретный режим.
Способы, о которых идет речь, следующие:
// Called when a button should be added to a toolbar for a hidden view controller
- (void)splitViewController: (UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController: (UIPopoverController*)pc;
// Called when the view is shown again in the split view, invalidating the button and popover controller
- (void)splitViewController: (UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem;
// Called when the view controller is shown in a popover so the delegate can take action like hiding other popovers.
- (void)splitViewController: (UISplitViewController*)svc popoverController: (UIPopoverController*)pc willPresentViewController:(UIViewController *)aViewController;
UISplitViewController
действительно ли получает уведомления о вращении.
Я могу получить метод willShowViewController , который будет вызван, если принудительно установить ориентацию строки состояния в альбомную ориентацию вправо (или влево)в начале запуска приложения, используя
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];
Однако willHideViewController
не вызывается.И я не хочу заставлять приложение запускаться в альбомной ориентации.Если я делаю то же самое, но заставляю его портретировать, я не получаю обратные вызовы.
Я не понимаю, почему контроллер разделенного представления не вызывает свои методы делегата, когда он ведет себя правильно.Эти методы должны вызываться из его метода -
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
изнутри, и когда я устанавливаю точку останова внутри этого, я могу проверить, что делегат установлен и что он все еще жив.
Застрял в этом весь день!Все остальное работает отлично, и я очень рад, что комбинация splitview / tabbar / navbar работает хорошо.Мне просто нужны эти уведомления.
Должен ли я просто вызывать их вручную при повороте?Кажется очень неправильным, когда `UISplitViewController 'должен делать это.