Swift PerformSegueWithIdentifier显示黑屏

Swift performSegueWithIdentifier shows black screen

我已经阅读了很多有关此问题的不同文章,但是似乎没有一种解决方案适合我。

我启动了一个新应用,并将初始ViewController放置在导航控制器中。我创建了第二个视图,并使用segue将它们链接到情节提要上。 segue成功运行,并且可以从第二个屏幕的打印语句中看到正在传输的数据,但是屏幕显示为黑色。

欢迎屏幕:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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)
}

故事板:
链接到我的故事板的图像
我的设定如下:
链接到我的安全信息图像

此外,我的viewController分别命名为WelcomeViewController和TraitViewController。它们具有welcomeVC和traitsVC的情节提要ID。

任何帮助将不胜感激。让我知道您是否需要其他信息。


通过按照@ronatory在可接受的答案中为我安排得如此好的步骤,我可以看到我已经将TraitViewController设置为UIPageViewController而不是UIViewController ..因此它没有生成任何错误,但这只是让我陷入了黑屏。我读了很多遍代码却从没注意到这一点,这很愚蠢。

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

1
class TraitViewController: UIPageViewController {

需要为

1
class TraitViewController: UIViewController {

我已经构建了您的应用程序,并且一切正常,也许您已经错过了一些东西,这是我的解决方案(注意:代码在Swift 3.0中,但是应该易于在Swift 2. *中采用):<铅>

情节提要:

enter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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)
  }

}

特征视图控制器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import UIKit

class TraitViewController: UIViewController {


  var gender: String =""

  override func viewDidLoad() {
    super.viewDidLoad()

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

}

结果:

enter