UISplitViewController一致的分隔符

时间:2013-10-25 15:05:57

标签: ios uipopovercontroller ipad uipopoverbackgroundview

在我的iPad应用程序中,我使用 UISplitViewController ,其中包含两个 UINavigationControllers 作为主和详细信息。在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]];
}

它的外观如下:

enter image description here

首次启动应用程序并点击 UIBarButton 后,主机如下所示:

enter image description here

第二次隐藏并点击 UIBarButton 项目后,主人看起来应该是这样的。它有红色分隔线而不是标准颜色:

enter image description here

现在, UISplitViewController 委托中使用的 CustomBackgroundView 实际上正在实例化,但不知何故第一次没有使用。

我知道如何在第一次强制 UIPopOverController 使用 CustomBackgroundView 吗?

2 个答案:

答案 0 :(得分:3)

我最后只是在 UISplitViewController 的视图中添加了一个子视图,该视图与 UINavigationBar 的颜色相同。

UISplitViewController *splitViewController = [[UISplitViewController alloc] init];
[splitViewController.view addSubview:coloredView];

答案 1 :(得分:0)

您的Split View是您的根视图控制器吗?看起来您在导航控制器中有拆分视图,这是不允许的。这可以解释你的图形错误。