1

私の iPad アプリでは、マスターとディテールとして2 つのUINavigationControllersを持つUISplitViewControllerを使用しています。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]];
}

これはどのように見えるかです:

ここに画像の説明を入力

初めてアプリを起動してUIBarButtonをタップすると、マスターは次のようになります。

ここに画像の説明を入力

UIBarButtonアイテムを非表示にして 2 回目にタップすると、マスターは想定どおりに表示されます。標準の色の区切り線ではなく、赤い区切り線があります。

ここに画像の説明を入力

現在、UISplitViewControllerデリゲートで使用されているCustomBackgroundViewは実際にインスタンス化されていますが、どういうわけか最初は使用されていません。

UIPopOverControllerにCustomBackgroundViewを初めて使用させる方法はありますか?

4

2 に答える 2

0

Split View はルート ビュー コントローラですか? 許可されていないナビゲーション コントローラー内に分割ビューがあるようです。それはあなたのグラフィカルなバグを説明するでしょう。

于 2013-10-27T12:47:08.713 に答える