【发布时间】:2017-04-20 18:18:20
【问题描述】:
基本上,我在滑出式菜单中有一个按钮(它是它自己的视图控制器,覆盖了Origin 屏幕的一部分,我们称它为Menu),按下该按钮时,将执行模态转换到另一个控制器,比如说Destination。
有什么方法可以在按下Menu 中的按钮(转到Destination)后,将Menu 解散回Origin,然后转到Destination?
这听起来很傻,但我认为我以前见过应用程序这样做。就我而言,想要这样做的原因是,一旦我在Destination 上按下“完成”,它就会将该控制器解散回Menu,而我希望它只是解散回Origin。我不能只从Destination 转回Origin。
代码:
这就是我从Origin 打开Menu 的方式:
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
}
}
这是我的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
}
最后解雇Destination 只是一个简单的
@IBAction func cancelButtonPressed(_ sender: Any) {
self.dismiss(animated: true, completion: nil)
}
我看到了这个问题,这基本上就是我想要做的,但不幸的是没有答案:Performing segue after dismissing modal swift
抱歉,如果这听起来令人困惑,但如果有人知道我在说什么,并且可以让我知道如何设置 segues/prepareForSegues 以使其工作,任何输入将不胜感激!
【问题讨论】:
-
既然你已经在使用segue了,为什么不从Destination做一个unwind segue呢?在 Origin 中实现 didUnwind,它应该跳过菜单
-
这似乎是我需要的,我刚刚尝试过,但唯一的问题是它会在返回原始控制器之前暂时停止在菜单上。有什么办法可以解决吗?