【发布时间】:2013-10-25 15:05:57
【问题描述】:
在我的 iPad 应用程序中,我使用 UISplitViewController 和两个 UINavigationController 作为主控和细节。在 Potrait 中,我希望通过 UIPopoverViewController 隐藏和访问主控。这是我的 UISplitViewController 子类的实现,效果很好:
- (id)init {
self = [super init];
if (self) {
_splitViewController = [[UISplitViewController alloc] init];
_splitViewController.delegate = self;
_searchViewController = [[UIViewController alloc] init];
_searchViewController.view.backgroundColor = [UIColor whiteColor];
_masterNavController = [[UINavigationController alloc] initWithRootViewController:_searchViewController];
_masterNavController.navigationBar.translucent = NO;
_mapViewController = [[MapViewController_iPad alloc] init];
_detailNavController = [[UINavigationController alloc] initWithRootViewController:_mapViewController];
_detailNavController.navigationBar.translucent = NO;
_splitViewController.viewControllers = @[_masterNavController, _detailNavController];
_splitViewController.view.backgroundColor = [UIColor redColor];
}
return self;
}
#pragma mark -
#pragma mark - UISplitViewControllerDelegate
- (void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc {
svc.view.backgroundColor = [UIColor redColor];
barButtonItem.title = NSLocalizedString(@"ipad_search_vc_bar_button_title", @"Name of the master view controller button on iPad");
[self.mapViewController.navigationItem setLeftBarButtonItem:barButtonItem animated:YES];
}
- (void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {
svc.view.backgroundColor = [UIColor redColor];
[self.mapViewController.navigationItem setLeftBarButtonItem:nil animated:YES];
}
- (void)splitViewController:(UISplitViewController *)svc popoverController:(UIPopoverController *)pc willPresentViewController:(UIViewController *)aViewController {
svc.view.backgroundColor = [UIColor redColor];
[pc setPopoverBackgroundViewClass:[CustomPopoverBackgroundView class]];
}
看起来是这样的:
第一次启动App并点击UIBarButton后,主界面如下:
在第二次隐藏并点击 UIBarButton 项目后,master 看起来应该是这样的。它有红色分隔线,而不是标准的彩色分隔线:
现在,UISplitViewController 委托中使用的 CustomBackgroundView 实际上正在被实例化,但不知何故第一次没有使用。
知道如何在第一次强制 UIPopOverController 使用 CustomBackgroundView 吗?
【问题讨论】:
-
我没有看到最后两张图片之间的区别
-
第一张图片有一个标准的彩色分隔线,第二张是红色的。
标签: ios uipopovercontroller ipad uipopoverbackgroundview