我有以下设置:
SplitViewController 作为 rootController。

细节部分是第一位的
ViewControllerView > ContainerView (稍后, View 将有 ImageView ,但这不是这里的问题)。
ContainerView 已转接(嵌入)到另一个 View Controller ( NavigationController )。

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

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

有什么方便的方法来获取 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;

最佳答案

当您添加 NavigationController 时,您可以将它向上(委托(delegate)方法)传递给 UISplitViewController 的子类并在那里存储引用。

您可以在 MyContentView 中添加 @property (MySplitViewController *) delegate; 并将其设置为 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;

在这种情况下,您应该真正包含一些错误处理。

关于ios - 在 ContainerController 中访问 UIViewController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15022319/

10-14 21:42