我有以下设置:SplitViewController
作为 rootController。
细节部分是第一位的ViewController
与 View
> 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/