4

私は次の設定をしています:

SplitViewControllerrootController として。

ディテール部分が先

ViewControllerView>を使用しますContainerView(後で、Viewを使用しますがImageView、それはここでは問題ではありません)。

ContainerView、別のビュー コントローラ ( ) にセグエ (埋め込み) されていますNavigationController

これは IB では次のようにグラフィカルに表されます。

IB のレイアウト

ここで、NavigationControllerrootController (例SplitViewController) からアクセスしたいと思います。「subViews」などの階層を下に移動できませんでした。

を手に入れる便利な方法はありNavigationControllerますか?

ViewController(ContainerViewと一緒に)なしで、次のようにアクセスできました:

UISplitViewController *splitViewController = (UISplitViewController *) self.window.rootViewController;
UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
// now i have the controller, i can delegate to it or use it in any other way:
splitViewController.delegate = (id) navigationController.topViewController;
4

1 に答える 1

1

NavigationController を追加すると、UISplitViewController のサブクラスにそれを上方向 (デリゲート メソッド) に渡し、そこに参照を格納できます。

@property (MySplitViewController *) delegate;MyContentView を追加して、それを splitviewcontroller に設定できます。セグエが起動すると、次のことができます。

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"ShowNavigationController"])
    {
        UINavigationController *controller = segue.destinationViewController;
        [self.delegate setNavigationController:controller];
    }
}

編集:コードに固執したい場合は、次のようにすることができます:

UISplitViewController *splitViewController = (UISplitViewController *) self.window.rootViewController;
UIViewController *container = [splitViewController.viewControllers lastObject];
UINavigationController *navigationController = [container.childViewControllers lastObject];
splitViewController.delegate = (id) navigationController.topViewController;

その場合、実際には何らかのエラー処理を含める必要があります。

于 2013-02-22T11:30:02.157 に答える