(Swift)当多个视图控制器导致相同视图时展开segue?
我正在尝试编写一个刽子手游戏,并且在解开细分时遇到了麻烦。 我有多个视图控制器,最终导致相同的视图,用户在其中播放实际的刽子手。 但是,根据呈现控制器,我希望游戏处于不同的“模式”(即:多人游戏,单人游戏等)。 我正在尝试添加一个再次播放按钮,该按钮可以展开前一个视图控制器,但是当用户可以使用多个路径进入此视图时,我不确定如何展开。
换句话说,我的应用程序有点:
A – > B – > C或
A – > D – > C其中C可以(理想地)展开到D或B.
我想知道实现这个的最佳方法是什么? 我应该只将所有视图控制器嵌入导航控制器吗? 或者有没有办法根据某种条件呈现某个视图控制器? 感谢您的任何帮助!
展开segue进程通常会自动确定先前的UIViewController实例。 Apple的技术说明中描述了确切的过程,但总结如下:
从启动展开segue的视图控制器开始,搜索顺序如下:
响应程序链中的下一个视图控制器发送一个
viewControllerForUnwindSegueAction:fromViewController:withSender:
message。 对于以模态方式呈现的视图控制器,这将是调用presentViewController:animated:completion:
的视图控制器presentViewController:animated:completion:
. 否则,parentViewController。默认实现在接收者的
childViewControllers
数组中搜索想要处理展开操作的视图控制器。 如果接收者的子视图控制器都不想处理展开动作,则接收器检查是否要处理展开动作并返回self(如果是)。 在这两种情况下,canPerformUnwindSegueAction:fromViewController:withSender:
方法用于确定给定视图控制器是否要处理展开操作。如果没有从
viewControllerForUnwindSegueAction:fromViewController:withSender:
返回视图控制器viewControllerForUnwindSegueAction:fromViewController:withSender:
在第一步中,搜索从响应者链中的下一个视图控制器重复。
因此,精确的过程将取决于您如何呈现视图控制器C – 例如,通过UINavigationController
上的模态演示segue或push segue,但只要B和D都实现了展开动作,您应该是好的。
如果您有任何自定义逻辑并希望以编程方式将unwind segue调用到不同的视图控制器,请按以下步骤操作:
-
将
unwindFromCViewController
添加到BViewController
和DBViewController
:BViewController.swift
class BViewController : UIViewController { @IBAction func unwindFromCViewController(segue:UIStoryboardSegue) { } }
DViewController.swift
class DViewController : UIViewController { @IBAction func unwindFromCViewController(segue:UIStoryboardSegue) { } }
-
在您的故事板中,创建此segue并为其指定标识符,并将其链接到您在
unwindFromCViewController
上面定义的操作:
-
从代码中调用unwind segue:
self.performSegueWithIdentifier("unwindFromCViewControllerSugueId", sender: self)
有了它,您可以放松到以前的视图,无论它来自哪里。
我只需要调用代码popViewController:animated
如果你将它推到导航堆栈上就会转到呈现控制器,或者如果它是以模态方式呈现的话,则dismissViewController:animated
。
- 如何在ios中parsingxmpp xml?
- 我可以从XCAssets包中获取NSURL吗?
- 如何在AppDelegate iPhone应用程序中使用@protocol?
- iPhone – 更改包标识符
- Swift:影响button点击的UITextfield? 由于animation无法input文字?
- 我如何回复GKTurnBasedExchange? GKLocalPlayerListener委托receivedExchangeReplies被间歇调用
- 创build效果顶部图像在向上滑动时被内容覆盖
- Swift – 从multidimensional array中填充多个部分的TableViews
- 倒数计时器实现的两个date之间的区别