gpt4 book ai didi

ios - 在发送者 View Controller 被解除后执行 segue

转载 作者:搜寻专家 更新时间:2023-10-31 08:17:40 25 4
gpt4 key购买 nike

基本上,我在滑出式菜单中有一个按钮(它是它自己的 View Controller ,覆盖了 Origin 屏幕的一部分,我们称它为 Menu),它,按下时,执行到另一个 Controller 的模态转场,比方说 Destination

有没有什么方法可以在按下 Menu 中的按钮(转到 Destination)后,让我关闭 Menu 回到 Origin,然后转到 Destination

这听起来很傻,但我认为我以前见过应用程序做过的事情。在我的例子中,想要这样做的原因是,一旦我在 Destination 上按下“Done”,它就会将该 Controller 解雇回 Menu,当我想要它时返回 Origin。我不能只执行从 Destination 返回到 Origin 的 segue。

代码:

这就是我从 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
}
}

这是我目前从 MenuDestinationprepareForSegue,没什么特别的:

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/prepareForSegue 以使其工作,那么任何输入都可以不胜感激!

最佳答案

基于对 this answer 的修改,以下应该有效:

在您的 Storyboard中,删除通过点击菜单按钮触发的转场并转到目的地。

创建一个从 Origin View Controller 到 Destination View Controller 的新 segue。此 segue 将手动执行。

当您在菜单中选择目标选项时,让菜单自行关闭,然后在 Origin 上执行目标转场,如下所示:

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

当 Destination 被关闭时,您应该看到 Origin,而根本看不到 Menu。

我在一个示例应用程序中对此进行了测试,其中“菜单”不是滑出,而是一个完整的模态视图 Controller ,它对我有用。

编辑:在使用@KingTim 进行故障排除时,他发现我们需要将 segue 从 UINavigationController 连接到 Destination,而不是 Origin。这是因为 Origin 在导航 Controller 中。在那个发现之后,它奏效了。

关于ios - 在发送者 View Controller 被解除后执行 segue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43527014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com