在UISplitViewController折叠显示中,如何以编程方式返回主视图控制器?
[self showDetailViewController:[[UINavigationController alloc] initWithRootViewController:detail] sender:self];
我也分别尝试了这3种方法,但没有一种方法有效:
if (self.splitViewController.collapsed) {
UIBarButtonItem *backButtonItem = self.navigationItem.leftBarButtonItem;
(1):[backButtonItem.target performSelector:backButtonItem.action];
(2):[[UIApplication sharedApplication] sendAction:backButtonItem.action to:backButtonItem.target from:nil forEvent:nil];
(3):objc_msgSend(backButtonItem.target, backButtonItem.action);
}
导航项目设置如同详细信息VC viewDidLoad:
self.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem;
self.navigationItem.leftItemsSupplementBackButton = YES;
答案 0 :(得分:2)
好吧,我找到了一个似乎有用的解决方案。我已经在iPhone 6和iPhone 6 Plus上进行了测试,但我只是在30分钟前才发现它,所以它可能有一些不幸的副作用,我还没有遇到过。
它很快。我希望它很清楚。如果您需要我在Objective-C中提供它,请告诉我。
if let splitViewController = splitViewController {
if splitViewController.collapsed {
let viewControllers = splitViewController.viewControllers
for controller in viewControllers {
// PrimaryNavigationController is the navigation controller I use
// as the split views master view, which is also set as its delegate
// but it could be any UINavigationController that is the
// primary controller of the split view
if controller.isKindOfClass(PrimaryNavigationController) {
controller.popViewControllerAnimated(true)
}
}
}
}
当我想解雇时,我会从我的详细视图中调用它。
代码通过检查拆分视图控制器是否折叠来工作,这是弹出详细视图的唯一状态(对我来说无论如何)。然后它只是在分割视图控制器中查找当前正在播放的导航控制器,并要求它弹出它的顶视图控制器。这是有效的,因为在折叠模式下,拆分视图主视图是堆栈中唯一的视图控制器。细节视图折叠成“它”,因此成为它的当前顶视图控制器,因此是弹出的那个。
似乎工作。如果它也适合你,请告诉我。
答案 1 :(得分:2)
我本来想做同样的事情,这段代码对我有用。我将它放在详细视图中,连接到导航栏中的按钮。
在我的应用程序中,详细信息视图可以多次自行调整,并且无论线程的深度如何,此代码都会返回主视图。
@IBAction func unwindSegueId(sender: AnyObject) {
if (self.splitViewController!.collapsed) {
self.splitViewController!.viewControllers[0].popToRootViewControllerAnimated(true)
}
}
答案 2 :(得分:1)
这似乎有效(假设主窗格中有导航控制器)
if (self.splitViewController.collapsed) {
[(UINavigationController *)self.splitViewController.viewControllers[0]
popToRootViewControllerAnimated:YES];
}