我正在用SpriteKit做一个游戏.

self.dismissViewControllerAnimated(true, completion: {})    

win vc(栈顶)被解散,所以我不知道在哪里再次调用它来解散游戏vc.

这是第一位VC:(请注意我下面以"/"开头的 comments )

class SelectLevelViewController: UIViewController { // I implemented a UIButton on its storyboard, and its segue shows GameViewController
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

这是第二个VC:

class GameViewController: UIViewController, UIPopoverPresentationControllerDelegate {
    var scene: GameScene!
    var stage: Stage!

    var startTime = NSTimeInterval()
    var timer = NSTimer()
    var seconds: Double = 0
    var timeStopped = false

    var score = 0

    @IBOutlet weak var targetLabel: UILabel!
    @IBOutlet var displayTimeLabel: UILabel!
    @IBOutlet weak var scoreLabel: UILabel!
    @IBOutlet weak var gameOverPanel: UIImageView!
    @IBOutlet weak var shuffleButton: UIButton!
    @IBOutlet weak var msNum: UILabel!

    var mapNum = Int()
    var stageNum = Int()

    var tapGestureRecognizer: UITapGestureRecognizer!

    override func viewDidLoad() {
        super.viewDidLoad()

        let skView = view as! SKView
        skView.multipleTouchEnabled = false

        scene = GameScene(size: skView.bounds.size)
        scene.scaleMode = .AspectFill
        msNum.text = "\(mapNum) - \(stageNum)"

        stage = Stage(filename: "Map_0_Stage_1")
        scene.stage = stage
        scene.addTiles()
        scene.swipeHandler = handleSwipe

        gameOverPanel.hidden = true
        shuffleButton.hidden = true

        skView.presentScene(scene)

        Sound.backgroundMusic.play()

        beginGame()
    }

    func beginGame() {
        displayTimeLabel.text = String(format: "%ld", stage.maximumTime)
        score = 0
        updateLabels()

        stage.resetComboMultiplier()

        scene.animateBeginGame() {
            self.shuffleButton.hidden = false
        }

        shuffle()

        startTiming()
    }

    func showWin() {
        gameOverPanel.hidden = false
        scene.userInteractionEnabled = false
        shuffleButton.hidden = true

        scene.animateGameOver() {
            self.tapGestureRecognizer = UITapGestureRecognizer(target: self, action: "hideWin")
            self.view.addGestureRecognizer(self.tapGestureRecognizer)
        }
    }

    func hideWin() {
        view.removeGestureRecognizer(tapGestureRecognizer)
        tapGestureRecognizer = nil

        gameOverPanel.hidden = true
        scene.userInteractionEnabled = true

        self.performSegueWithIdentifier("win", sender: self) // this segue shows WinVC but idk where to dismiss this GameVC after WinVC gets dismissed...
    }

    func shuffle() {...}
    func startTiming() {...}
}

这是第三个VC:

class WinVC: UIViewController {

    @IBOutlet weak var awardResult: UILabel!

    @IBAction func dismissVC(sender: UIButton) {
        self.dismissViewControllerAnimated(true, completion: {}) // dismissing WinVC here when this button is clicked
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}

推荐答案

@在这种情况下,Ken Toh的 comments 对我起到了作用——在所有其他内容都被删除后,从视图控制器中调用Disclose.

如果您有一个由3个视图控制器ABC组成的"堆栈",其中C位于顶部,那么调用A.dismiss(animated: true, completion: nil)将同时关闭B和C.

如果没有对堆栈根的引用,可以将几个访问链接到presentingViewController以访问它.比如:

self.presentingViewController?.presentingViewController?.dismiss(animated: true, completion: nil)

Swift相关问答推荐

阴影动画的动画不流畅

减go 用SWIFT struct 填充的NSCountedSet

如何获取嵌套数组中项的路径以修改数组?

我需要一些关于 SwiftUI 动画的帮助

SwiftUI,如何更改具有多个按钮和一个布尔条件的一个按钮标签

如何从UIKit中的AttributeContainer获取属性并将其分配给某个变量

使用UICollectionViewFlowLayout创建水平的UICollectionView,并同时将单元格对齐到左边和右边的能力

为什么我的 tableView 没有推送到 tableView 内的 detailViewController?

允许为 self 分配新的 struct 值的理由是什么?

自定义碰撞形状出现在错误的位置

如何返回一个通过 SwiftUI 中的另一个协议间接继承 View 协议的 struct ?

在 struct 中的序列和非序列泛型函数之间进行 Select

我如何遵守与演员的协议?

为什么 id 不能通过 struct 从 Objective-C 移植到 Swift?

如何让不同的组件拥有不同的动画?

使用 Date.ParseStrategy 将字符串解析为日期

在视图中设置所有变量

如何实现 Swift 的 Comparable 协议?

swift 中的@property/@synthesize 类似功能

使用 swift IOS 使 UIBarButtonItem 消失