以编程方式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]; }