以编程方式closures折叠显示中的详细视图控制器?

在UISplitViewController崩溃的显示中,我怎样才能以编程方式返回到主视图控制器?

详情

我GOOGLE了,但没有find解决办法。 不知道我是否使用正确的关键字。 这是我如何显示详细视图控制器:

[self showDetailViewController:[[UINavigationController alloc] initWithRootViewController:detail] sender:self]; 

我也尝试了这三种方法,但都没有工作:

 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); } 

导航项设置像thie一样详细VC viewDidLoad:

 self.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem; self.navigationItem.leftItemsSupplementBackButton = YES; 

好的,我find了一个似乎可行的解决scheme。 我已经在iPhone 6和iPhone 6 Plus上进行了testing,但是我只是在三十分钟前才发现它,所以可能会有一些不幸的副作用,我还没有碰到。

它很快。 我希望这是清楚的。 让我知道如果你需要我在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) } } } } 

当我想解雇它时,我从我的详细视图中调用这个。

代码的工作原理是检查分割视图控制器是否被折叠,这是唯一的状态,popup详细视图是有意义的(对我来说)。 然后它只是寻找当前在分割视图控制器中的导航控制器,并要求它popup它的顶视图控制器。 这是因为当处于折叠模式时,分割视图主视图是堆栈中唯一的视图控制器。 细节视图被“折叠”成“它”,因此成为它的当前顶视图控制器,因此被popup。

似乎工作。 让我知道如果它也适合你。

我正在寻找完全一样的,这个代码为我工作。 我把它放在详细视图中,连接到导航栏中的一个button。

在我的应用程序中,细节视图可以多次循环,而且无论代码行得多深,代码都会返回到主视图。

 @IBAction func unwindSegueId(sender: AnyObject) { if (self.splitViewController!.collapsed) { self.splitViewController!.viewControllers[0].popToRootViewControllerAnimated(true) } } 

这似乎工作(只要你在主窗格中有一个导航控制器)

 if (self.splitViewController.collapsed) { [(UINavigationController *)self.splitViewController.viewControllers[0] popToRootViewControllerAnimated:YES]; }