Swift performSegueWithIdentifier显示黑屏

Jak*_*den 0 screen viewcontroller swift

我已经阅读了很多关于这个问题的不同帖子,但没有一个解决方案对我有用.

我启动了一个新应用程序,并将初始ViewController放在导航控制器中.我创建了第二个视图,并在故事板上用segue将它们链接在一起.segue工作成功,我可以从第二个屏幕看到我在打印语句中传输的数据,但屏幕显示为黑色.

WelcomeScreen:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "segueToTraits"{
        if let gender = self.selectedGender{
            let traitVC = segue.destinationViewController as? TraitViewController
            traitVC!.gender = gender
        }
    }
}

func sendGenderToTraitsView(gender : String?){
    performSegueWithIdentifier("segueToTraits", sender: self)

}

@IBAction func button1(sender: UIButton) {
    selectedGender = boyGender
    self.sendGenderToTraitsView(selectedGender)
}


@IBAction func button2(sender: UIButton) {
    selectedGender = girlGender
    self.sendGenderToTraitsView(selectedGender)
}
Run Code Online (Sandbox Code Playgroud)

故事板: 链接到我的故事板的图像 我的segue设置如下: 链接到我的segue信息的图像

另外,我的viewControllers名为WelcomeViewController和TraitViewController.他们有来自welcomeVC和traitsVC的故事板id.

任何帮助都会非常感激.如果您需要任何其他信息,请与我们联系.

ron*_*ory 5

我已经构建了你的应用程序,一切正常,也许你错过了一些东西,这是我的解决方案(注意:代码在Swift 3.0中,但应该很容易将它采用到Swift 2.*):

故事板:

在此输入图像描述

设置segueToTraits标识符:

在此输入图像描述

在故事板中将TraitViewController类设置为自定义类:

在此输入图像描述

带按钮的视图控制器:

import UIKit

class ViewController: UIViewController {  

  let boyGender = "boy"
  let girlGender = "girl"
  var selectedGender: String?


  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "segueToTraits"{
      if let gender = self.selectedGender {
        let traitVC = segue.destination as? TraitViewController
        traitVC!.gender = gender
      }
    }
  }

  func sendGenderToTraitsView(gender : String?){
    performSegue(withIdentifier: "segueToTraits", sender: self)

  }

  @IBAction func button1(sender: UIButton) {
    selectedGender = boyGender
    self.sendGenderToTraitsView(gender: selectedGender)
  }


  @IBAction func button2(sender: UIButton) {
    selectedGender = girlGender
    self.sendGenderToTraitsView(gender: selectedGender)
  }

}
Run Code Online (Sandbox Code Playgroud)

特质视图控制器:

import UIKit

class TraitViewController: UIViewController {


  var gender: String = ""

  override func viewDidLoad() {
    super.viewDidLoad()

    print("gender: \(gender)")
  }

}
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

您可以在此处找到示例项目


Jak*_*den 5

通过遵循@ronatory在可接受的答案中为我安排得很好的步骤,我可以看到我将TraitViewController设置为UIPageViewController而不是UIViewController ..因此它不会产生任何错误,但是它只是把我带到了黑屏。我读了很多遍代码却从未注意到这一点,这很愚蠢。

要点:如果您在ViewController上随机出现黑屏,请确保您的类正在扩展正确的父类。就我而言:

class TraitViewController: UIPageViewController {
Run Code Online (Sandbox Code Playgroud)

需要成为

class TraitViewController: UIViewController {
Run Code Online (Sandbox Code Playgroud)