【发布时间】:2012-03-13 18:30:20
【问题描述】:
我有一个 iPad 应用程序,它使用 UISplitViewController 作为根控制器,我已经设置了委托,并且我正在为 DetailView 使用 UINavigationController,它似乎可以正常工作。
当 DetailView 部分中显示特定视图控制器时,我希望 MasterViewContoller 始终隐藏(在所有旋转中)。我可以使用 UISplitViewController Delegate 上的 shouldHideViewController 方法来做到这一点。
但是,如果我这样做了,那么当我将 DetailView 部分中的 ViewController 更改为另一个时,会显示 MasterView,但不会在委托中调用 willHideViewController/willShowViewController。
如果我旋转设备并旋转回来,它们会被调用并且它会按预期工作,但在设备旋转并旋转回原始方向之前不会调用它们。
这会导致在 MasterView 显示后第一次旋转时不显示弹出按钮。
- (void)splitViewController:(UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController:(UIPopoverController*)pc {
// Keep references to the popover controller and the popover button, and tell the detail view controller to show the button.
barButtonItem.title = @"Survey Sections";
self.popoverController = pc;
self.rootPopoverButtonItem = barButtonItem;
UIViewController <SubstitutableDetailViewController> *detailViewController = [self.splitViewController.viewControllers objectAtIndex:1];
if ([detailViewController isKindOfClass:[UINavigationController class]]) {
UINavigationController *detailNavController = (UINavigationController *)detailViewController;
[[detailNavController.viewControllers objectAtIndex:0] showRootPopoverButtonItem:rootPopoverButtonItem];
}
}
- (void)splitViewController:(UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {
// Nil out references to the popover controller and the popover button, and tell the detail view controller to hide the button.
UIViewController <SubstitutableDetailViewController> *detailViewController = [self.splitViewController.viewControllers objectAtIndex:1];
if ([detailViewController isKindOfClass:[UINavigationController class]]) {
UINavigationController *detailNavController = (UINavigationController *)detailViewController;
[[detailNavController.viewControllers objectAtIndex:0] invalidateRootPopoverButtonItem:rootPopoverButtonItem];
}
self.popoverController = nil;
self.rootPopoverButtonItem = nil;
}
- (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation {
UIViewController *detailViewController = [svc.viewControllers objectAtIndex:1];
if ([detailViewController isMemberOfClass:[MySurveysViewController class]]) {
return YES;
}else {
if (UIInterfaceOrientationIsLandscape(orientation)) {
return NO;
}else {
return YES;
}
}
}
【问题讨论】:
标签: objective-c ipad uisplitviewcontroller