【问题标题】:unwind two segues from back button in swift迅速从后退按钮展开两个segues
【发布时间】:2016-01-25 21:03:39
【问题描述】:

我有一个父视图控制器,用户在其中选择他们想要玩的游戏,然后是一个子 1 视图控制器,用于玩游戏,然后是一个子 2 视图控制器,它在游戏完成后显示分数。如何使用子 2 视图中的标准后退按钮返回父视图控制器。我不需要在孩子 2 VC 和父母之间传递任何东西。

我在 parentVC 中创建了一个 unwind segue

@IBAction func unwindToParentVC(segue: UIStoryBoardSegue) {
}

我已经 ctrl 从黄色的 Child 2 VC 图标拖到 Exit 图标上并选择了上面的 unwind segue,但我的后退按钮似乎没有触发这个 segue。

我已经阅读了关于 SO 的其他解决方案,说我需要使用

override func didMoveToParentViewController(parent: UIViewController?) {
    }

但我不确定如何让后退按钮调用此方法,以及我需要在方法主体中添加哪些代码。非常感谢任何有关我出错的地方的帮助!

【问题讨论】:

    标签: swift uiviewcontroller segue


    【解决方案1】:

    如何使用子 2 视图中的标准后退按钮返回父视图控制器。

    标准的后退按钮(在UINavigationController 中)实际上只做一件事:将当前视图控制器从导航堆栈中弹出,然后返回到前一个视图控制器。无需尝试更改该行为,您只需更改之前的视图控制器即可。

    自定义转场示例:

    class ReplaceSegue: UIStoryboardSegue {
        override func perform() {
            guard let nav = sourceViewController.navigationController
                else { return }
    
            // Remove current view controller from navigation stack before segue
            let viewControllers = nav.viewControllers.filter { $0 != sourceViewController }
    
            // Add destination to view controllers and perform segue
            nav.setViewControllers(viewControllers + [destinationViewController], animated: true)
        }
    }
    

    然后将子 1 和子 2 之间的 segue 类更新为 ReplaceSegue。这将在 segue 时从导航堆栈中删除子 1,这样当用户点击子 2 上的标准后退按钮时,它会返回给父母。

    【讨论】:

    • 感谢 Kenley,但我如何更新 segue 类 - 覆盖 func prepareForSegue(segue: ReplaceSegue, sender: AnyObject?) 不喜欢 ReplaceSegue 类。
    • 在您的 Storyboard 文件中,单击您要自定义的 Segue(在本例中为 child 1 和 child 2 之间的 Segue。)单击 Segue 后,在右侧的 Attributes Inspector 中,您可以将“Class”设置为新的“ReplaceSegue”。这告诉 UIKit 使用您的自定义 Segue 类而不是标准的 UIStoryboardSegue 类。
    【解决方案2】:

    1) 将此代码传递到您要进入的视图控制器

    @IBAction func prepareForUnwind(segue: UIStoryboardSegue) {
    

    }

    2)在当前视图控制器中右键单击并拖动按钮退出并选择prepareForUnwind:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多