iPhone 6 Plus 上的拆分视图控制器旋转
Split view controller rotation on iPhone 6 Plus
我有一个横向模式的拆分视图控制器,带有两个导航控制器。
这会折叠成纵向的单个导航控制器,并从主视图中推送详细视图控制器。
如果我在纵向推动详细视图控制器时旋转回横向,我不明白如何将详细视图控制器放回它自己的导航控制器中。
您应该实施 UISplitViewControllerDelegate。最简单的方法可能是拥有自己的 MySplitViewController class 并将其自身设置为 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;
}
此方法是您从主控制器和 return 作为详细视图控制器获取所需内容的机会。上面的示例代码相当简单,您可能需要遍历导航 viewControllers 并从特定视图控制器开始选择所有内容(假设您从详细信息视图推送)。
无论如何,花点时间阅读一下真的会有收获:UISplitViewController class reference and especially UISplitViewControllerDelegate Protocol Reference
这样就会清楚很多。
如果您想要快捷方式,请查看 Xcode 拆分视图控制器模板项目。那一个还应该包含针对您的问题的提示或确切解决方案。
使细节有自己的导航控制器,就像在主细节模板中一样。当拆分视图折叠时,它会在主导航控制器上调用 showViewController
,当它检测到 class UINavigationController
的控制器时,它会设置允许嵌套导航控制器为真并隐藏导航栏。这样你就可以保留详细导航,这样当你旋转到横向并分离它时可以再次使用现有导航。
我有一个横向模式的拆分视图控制器,带有两个导航控制器。
这会折叠成纵向的单个导航控制器,并从主视图中推送详细视图控制器。
如果我在纵向推动详细视图控制器时旋转回横向,我不明白如何将详细视图控制器放回它自己的导航控制器中。
您应该实施 UISplitViewControllerDelegate。最简单的方法可能是拥有自己的 MySplitViewController class 并将其自身设置为 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;
}
此方法是您从主控制器和 return 作为详细视图控制器获取所需内容的机会。上面的示例代码相当简单,您可能需要遍历导航 viewControllers 并从特定视图控制器开始选择所有内容(假设您从详细信息视图推送)。
无论如何,花点时间阅读一下真的会有收获:UISplitViewController class reference and especially UISplitViewControllerDelegate Protocol Reference 这样就会清楚很多。 如果您想要快捷方式,请查看 Xcode 拆分视图控制器模板项目。那一个还应该包含针对您的问题的提示或确切解决方案。
使细节有自己的导航控制器,就像在主细节模板中一样。当拆分视图折叠时,它会在主导航控制器上调用 showViewController
,当它检测到 class UINavigationController
的控制器时,它会设置允许嵌套导航控制器为真并隐藏导航栏。这样你就可以保留详细导航,这样当你旋转到横向并分离它时可以再次使用现有导航。