ios – 在发送方视图控制器被解除后执行segue

ios – 在发送方视图控制器被解除后执行segue,第1张

概述基本上,我在滑出菜单中有一个按钮(它是自己的视图控制器,覆盖Origin屏幕的一部分,我们称之为菜单),当按下时,执行模态segue到另一个控制器,比如说Destination. 有没有办法按下菜单中的按钮(转到目的地),我可以将菜单关闭回原点,然后转到目的地? 这听起来很傻,但我认为我以前见过应用程序.在我的情况下,想要这样做的原因是,一旦我在Destination上按下“完成”,它就会将该控制 基本上,我在滑出菜单中有一个按钮(它是自己的视图控制器,覆盖Origin屏幕的一部分,我们称之为菜单),当按下时,执行模态segue到另一个控制器,比如说Destination.

有没有办法按下菜单中的按钮(转到目的地),我可以将菜单关闭回原点,然后转到目的地?

这听起来很傻,但我认为我以前见过应用程序.在我的情况下,想要这样做的原因是,一旦我在Destination上按下“完成”,它就会将该控制器解除回菜单,当我希望它只是关闭回原点时.我不能只是将一个segue执行回Origin from Destination.

码:

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

这是我目前从菜单到目的地的prepareForSegue,没什么特别的:

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使其工作,任何输入将不胜感激!

解决方法 根据对 this answer的修改,以下内容应该有效:

在故事板中,删除通过点击菜单按钮触发的segue并转到目标.

创建一个从Origin视图控制器到Destination视图控制器的新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)    }

当目的地被解雇时,您应该看到Origin,而根本没有看到菜单.

我在一个示例应用程序中对此进行了测试,其中“菜单”不是幻灯片,而是一个完整的模态视图控制器,它对我有用.

编辑:在使用@KingTim进行故障排除时,他发现我们需要将来自UINavigationController而不是Origin的segue连接到Destination.这是因为Origin位于导航控制器内.在那次发现之后,它起作用了.

总结

以上是内存溢出为你收集整理的ios – 在发送方视图控制器被解除后执行segue全部内容,希望文章能够帮你解决ios – 在发送方视图控制器被解除后执行segue所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1077896.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存