4

我有以下设置:

SplitViewController作为根控制器。

细节部分是第一

ViewControllerView> ContainerView(稍后,View将有ImageView,但这不是这里的问题)。

已经 segue (ContainerView嵌入)到另一个视图控制器(NavigationController)。

这在 IB 中以图形方式表示为:

IB中的布局

现在问题是我想NavigationController从 rootController 访问(例如SplitViewController)。我无法向下导航“子视图”的层次结构等等。

有什么方便的方法可以获取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。当 segue 被触发时,您可以执行以下操作:

-(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 回答