我在横向模式下有一个带有两个导航控制器的分割视图控制器。
以纵向折叠为单个导航控制器,并从主控制器推送详细视图控制器。
如果在纵向按下细节视图控制器时我回到横向,我不明白如何将细节视图控制器放回到它自己的导航控制器中。
答案 0 :(得分:4)
您应该实现UISplitViewControllerDelegate。最简单的方法可能是拥有自己的MySplitViewController类并将自己设置为viewDidLoad中的委托:
self.delegate = self;
首先,您可能希望showDetailViewController看起来像:
- (BOOL) splitViewController:(UISplitViewController*)splitViewController showDetailViewController:(UIViewController*)vc sender:(id)sender
{
if (splitViewController.collapsed)
{
[(UINavigationController*)splitViewController.viewControllers[0]) pushViewController:vc animated:YES];
}
else
{
self.viewControllers = @[ self.viewControllers.firstObject, vc ];
}
return YES;
}
这应该注意在两个方向上正确显示细节视图。
接下来,您应该实现以下类似的委托方法:
- (UIViewController*) splitViewController:(UISplitViewController*)splitViewController
separateSecondaryViewControllerFromPrimaryViewController:(UIViewController*)primaryViewController
{
UINavigationController* nc = primaryViewController;
UIViewController* detailVC = nc.viewControllers.lastObject;
return detailVC;
}
此方法是您从主控制器获取所需内容并将其作为详细视图控制器返回的机会。上面的示例代码非常简单,您可能需要遍历导航viewControllers并从特定视图控制器开始选择所有代码(假设您已从详细信息视图中推送)。
无论如何,花一些时间阅读:UISplitViewController class reference,尤其是UISplitViewControllerDelegate Protocol Reference,真的会有所回报 这将更加清晰。 如果需要快捷方式,请查看Xcode拆分视图控制器模板项目。那个还应包含针对您的问题的提示或确切解决方案。
答案 1 :(得分:0)
使细节具有自己的导航控制器,就像在“主细节”模板中一样。当拆分视图折叠时,它将在主导航控制器上调用showViewController
,并且当它检测到类UINavigationController
的控制器时,它将设置为true嵌套嵌套的导航控制器并隐藏导航栏。这样,您就可以保留详细信息导航,以便在旋转到横向并分离时可以再次使用现有导航。