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. *中采用):<铅>
情节提要:
设置segueToTraits标识符:
在情节提要中将TraitViewController类设置为自定义类:
带有按钮的视图控制器:
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)") } } |
结果:
您可以在此处找到示例项目