当前位置: 首页 > 面试题库 >

如何关闭当前的ViewController并转到Swift中的另一个视图

秦安宁
2023-03-14
问题内容

我是Swift的新手,我想知道如何解散当前的视图控制器并转到另一个视图。

我的故事板如下:MainMenuView-> GameViewController->
GameOverView。我想关闭GameViewController转到GameOverView,而不是MainMenuView。

我在MainMenuView中使用以下代码:

@IBAction func StartButton(sender: UIButton) {
    let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
    let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("GameViewController") as! GameViewController
    self.presentViewController(nextViewController, animated:true, completion:nil)
    restGame()
}

在GameViewController中,我使用此代码,但不会关闭GameViewController。

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("GameOverView") as! GameOverView
self.presentViewController(nextViewController, animated:true, completion:nil)

这是我的GameOverView代码:

class GameOverView: UIViewController{
    // save the presenting ViewController
    var presentingViewController :UIViewController! = self.presentViewController

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    @IBAction func ReplayButton(sender: UIButton) {
        restGame()
        didPressClose()
    }
    @IBAction func ReturnMainMenu(sender: UIButton) {
        Data.GameStarted = 1
        self.dismissViewControllerAnimated(false) {
            // go back to MainMenuView as the eyes of the user
            self.presentingViewController.dismissViewControllerAnimated(false, completion: nil);
        }
       /* let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
        let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("MainScene") as! MainScene
        self.presentViewController(nextViewController, animated:true, completion:nil)*/

    }
    func restGame(){
        Data.score = 0
        Data.GameHolder = 3
        Data.GameStarted = 1
        Data.PlayerLife = 3.0
        Data.BonusHolder = 30
        Data.BonusTimer = 0
    }
    func didPressClose()
    {
        self.self.dismissViewControllerAnimated(true, completion:nil)
    }
    override func shouldAutorotate() -> Bool {
        return false
    }

    deinit{
        print("GameOverView is being deInitialized.");

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Release any cached data, images, etc that aren't in use.
    }

    override func prefersStatusBarHidden() -> Bool {
        return true
    }


}

有什么建议?


问题答案:

您可以做的就是GameOverView显示,毕竟,在显示它时,它GameViewController位于层次结构中的下面,然后在GameOverView运行时,当您要关闭时,下面的代码将两者都关闭GameOverView,就像这样:

@IBAction func ReturnMainMenu(sender: UIButton) {
    // save the presenting ViewController
    var presentingViewController: UIViewController! = self.presentingViewController

    self.dismissViewControllerAnimated(false) {
          // go back to MainMenuView as the eyes of the user
          presentingViewController.dismissViewControllerAnimated(false, completion: nil)
    }
}

要关闭时需要调用上述代码GameOverView

希望对您有所帮助。



 类似资料:
  • 我有一个自定义的,我希望将作为从一传递到二(这是模态)。问题是,当我使用在之间切换时,函数不会被触发,因为处理我假设的转换。 那我该怎么做呢?如何将从一个传递到下一个。

  • 问题内容: 在一个ViewController中,我试图像这样在另一个ViewController中的TableView中重新加载数据: 其中tableViewController是TableView控制器中的类(我知道这不是大写字母),而table是TableView。好吧,这样做会产生“致命错误:在展开可选值时意外发现nil”,并且我想这是有道理的,因为尚未加载“ presentedViewC

  • 问题内容: 我有以下内容: 我如何从另一个ViewController 访问? 我需要访问此功能: 问题答案: 默认情况下,swift中的所有内容都是公开的,因此,如果您声明以下内容: 只要拥有它的实例,就可以访问它:

  • 问题内容: 问题 我开始浏览上的新功能,并尝试了一些演示项目和教程。现在我被困在: 实例化,然后呈现特定情节提要中的 Objective-C解决方案 如何在Swift上实现这一目标? 问题答案: 这个答案最近针对Swift 5.2和iOS 13.4 SDK进行了修订。 这都是新语法和稍微修改的API的问题。UIKit的基本功能没有改变。对于绝大多数iOS SDK框架来说都是如此。 如果您遇到问题,

  • 问题内容: 我想同时显示两个(或更多) JFrame 。 当我关闭其中一个(使用默认的关闭按钮)时,其他框架仍应可见。 我怎样才能做到这一点? 问题答案: 如果您 不 希望应用程序在a 关闭时终止,请使用 代替 从文档中: (在WindowConstants中定义):不执行任何操作;要求程序处理注册的WindowListener对象的windowClosing方法中的操作。 (在WindowCon

  • 我希望在代码中实现一个处理程序,如果连接到客户端的服务器在10秒后没有响应,则允许客户端自动连接到同一网络上的服务器的第二个实例。我做错了什么?? 当我运行服务器,然后是客户端时,一切都很好。然后我在同一网络上的另一台机器上启动第二个服务器,并尝试从同一客户端发送文本,客户端应该自动检测到第一个服务器断开连接,连接到服务器的第二个实例并发送文本消息。下面是我得到的例外: 线程“main”java.