以编程方式在ios swift中显示新控制器仅显示空白屏幕

时间:2018-04-19 15:03:31

标签: ios swift uiviewcontroller

我正在使用swift开发一个简单的IOS应用程序。在我的应用程序中,我需要从另一个控制器以编程方式打开新控制器。所以我在故事板上添加了另一个场景。

这是截图 enter image description here

然后我为新控制器添加了一个新类,它继承自UIViewController。这是新控制器的代码

import UIKit

class ReplayController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
    }
    */

}

然后,我尝试在代码中从主控制器打开新的控制器视图(ReplayController)。

func gameOver()
    {
        let replayController = ReplayController()
        present(replayController, animated: true, completion: nil)
    }

当我调用该功能时,它只会弹出空白屏幕。屏幕上没有任何内容。有什么问题,我该如何解决?

3 个答案:

答案 0 :(得分:2)

您必须在故事板中使用id引用它

 let replayController = self.storyboard?.instantiateViewController(withIdentifier: "replayControllerID") as! ReplayController

 present(replayController, animated: true, completion: nil) 

仅作为此行

let replayController = ReplayController()

不加载与VC关联的xib或storyboard对象

答案 1 :(得分:2)

在您的情节提要文件中,确保ReplayController拥有其文件所有者'设置为ReplayController课程。然后设置如下所示的故事板ID:

documentation

然后你可以这样加载它:

let replay = storyboard?.instantiateViewController(withIdentifier: "ReplayController") as! ReplayController
self.present(replay, animated: true, completion: nil) 

答案 2 :(得分:1)

在故事板中设计视图控制器时,需要使用类feature的方法instantiateViewController以编程方式创建它们,以便与所有插座一起访问它。

在此之前,您需要在故事板中设置相应视图控制器的 Storyboard ID ,如下所示:

Storyboard ID Screenshot

然后呈现它:

UIStoryboard