基本上,我在滑出菜单中有一个按钮(它是自己的视图控制器,覆盖部分Origin屏幕,让我们称之为Menu),当按下时,执行模态segue到另一个控制器,比方说Destination.
是否有任何方法按下按钮Menu(转到Destination),我可以解雇Menu回来Origin,然后转向Destination?
这听起来很傻,但我认为我以前见过应用程序.在我的情况下,想要这样做的原因是,一旦我按下"完成" Destination,它就会将该控制器取回Menu,当我希望它只是解雇时Origin.我不能只是执行SEGUE回Origin的Destination.
码:
这是我打开Menu的Origin:
let interactor = Interactor()
@IBAction func openMenu(_ sender: AnyObject) {
performSegue(withIdentifier: "openMenu", sender: nil)
}
@IBAction func edgePanGesture(sender: UIScreenEdgePanGestureRecognizer) {
let translation = sender.translation(in: view)
let progress = MenuHelper.calculateProgress(translationInView: translation, viewBounds: view.bounds, direction: .Right)
MenuHelper.mapGestureStateToInteractor(
gestureState: sender.state,
progress: progress,
interactor: interactor){
self.performSegue(withIdentifier: "openMenu", sender: nil)
}
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destinationViewController = segue.destination as? MenuViewController {
destinationViewController.transitioningDelegate = self
destinationViewController.interactor = interactor
destinationViewController.currentRoomID = self.currentRoomID
}
}
Run Code Online (Sandbox Code Playgroud)
这是我prepareForSegue从Menu到Destination目前,没有任何幻想:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
super.prepare(for: segue, sender: sender)
let inviteVC = segue.destination as! InviteVipViewController
inviteVC.currentRoomID = self.currentRoomID
}
Run Code Online (Sandbox Code Playgroud)
最后解雇Destination只是一个简单的问题
@IBAction func cancelButtonPressed(_ sender: Any) {
self.dismiss(animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
我看到这个问题基本上就是我要做的事情,但遗憾的是没有答案:在解雇modal swift后执行segue
很抱歉,如果这听起来令人困惑,但如果有人知道我在说什么,并且可以让我知道如何设置segues/prepareForSegues以使其工作,任何输入将不胜感激!
根据对此答案的修改,以下内容应该有效:
在故事板中,删除通过点击菜单按钮触发的segue并转到目标.
创建一个从Origin视图控制器到Destination视图控制器的新segue.这个segue将手动执行.
在菜单中选择目标选项后,让菜单自行关闭,然后在原点上执行目标segue,如下所示:
// This code goes in Menu, and you should call it when
// the menu button is tapped.
//
// presentingViewController is Origin
weak var pvc = self.presentingViewController
self.dismiss(animated: true) {
// Menu has been dismissed, but before it is destroyed
// it calls performSegue on Origin
pvc?.performSegue(withIdentifier: "openDestination", sender: nil)
}
Run Code Online (Sandbox Code Playgroud)
当目的地被解雇时,您应该看到Origin,而根本没有看到菜单.
我在一个示例应用程序中测试了这个,其中"菜单"不是幻灯片,而是一个完整的模态视图控制器,它对我有用.
编辑:在使用@KingTim进行故障排除时,他发现我们需要将segue从而UINavigationController不是Origin连接到Destination.这是因为Origin位于导航控制器内.在那次发现之后,它起作用了.
| 归档时间: |
|
| 查看次数: |
7286 次 |
| 最近记录: |