我有两个导航控制器在横向模式下的分离视图控制器。
这会折叠成纵向的单个导航控制器,并且详细视图控制器将从主机中推出。
如果我在纵向按下详细视图控制器时旋转回风景模式,我不明白如何将详细视图控制器放回到它自己的导航控制器中。
I have a split view controller in landscape mode with two navigation controllers.
This collapses to a single navigation controller in portrait and the detail view controller is pushed from the master.
If I rotate back to landscape when the detail view controller is pushed in portrait I don't understand how to put the detail view controller back into it's own navigation controller.
最满意答案
你应该实现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; }这种方法是你从主控制器获取任何你想要的东西的机会,并将它作为详细视图控制器返回。 上面的示例代码非常简单,您可能需要遍历导航视图控制器,并从特定的视图控制器中选择所有视图(假设您已从细节视图推入)。
无论如何,这需要花费一些时间并阅读: UISplitViewController类的引用 ,尤其是UISplitViewControllerDelegate协议参考这将更清晰。 如果你想要一个快捷方式,看看Xcode分割视图控制器模板项目。 那个人还应该包含提示或确切的解决方案,以解决您的问题。
You should implement UISplitViewControllerDelegate. Simplest way may be to have your own MySplitViewController class and set itself as a delegate in viewDidLoad:
self.delegate = self;First, you may want showDetailViewController to look something like:
- (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; }That should take care of proper showing of details view in both orientations.
Next, you should implement following delegate method similar to this:
- (UIViewController*) splitViewController:(UISplitViewController*)splitViewController separateSecondaryViewControllerFromPrimaryViewController:(UIViewController*)primaryViewController { UINavigationController* nc = primaryViewController; UIViewController* detailVC = nc.viewControllers.lastObject; return detailVC; }This method is your chance to take whatever you want from primary controller and return that as detail view controller. The example code above is rather simple one, you may need to traverse through navigation viewControllers and pick all starting from specific view controller (assuming you had pushes from details view).
Anyways, it would really payoff to take some time and read: UISplitViewController class reference and especially UISplitViewControllerDelegate Protocol Reference This will be much clearer. If you want a shortcut, take a look at Xcode split view controller template project. That one should also contain hint or exact solution for your problem.
更多推荐
发布评论