Swift performSegueWithIdentifier shows black screen

后端 未结 2 797
醉话见心
醉话见心 2020-12-22 05:40

I have read through a lot of different posts regarding this issue, but none of the solutions seemed to work for me.

I started a new app and I placed the initial Vie

相关标签:
2条回答
  • 2020-12-22 06:23

    I've build your app and everything works, maybe you've missed something, here is my solution (Note: Code is in Swift 3.0, but should be easy to adopt it to Swift 2.*):

    The storyboard:

    Set the segueToTraits identifier:

    Set the TraitViewController class as custom class in the storyboard:

    The view controller with the buttons:

    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)
      }
    
    }
    

    The trait view controller:

    import UIKit
    
    class TraitViewController: UIViewController {
    
    
      var gender: String = ""
    
      override func viewDidLoad() {
        super.viewDidLoad()
    
        print("gender: \(gender)")
      }
    
    }
    

    Result:

    You can find the sample project here

    0 讨论(0)
  • 2020-12-22 06:26

    By following the steps that @ronatory had laid out so well for me in the accepted answer, I was able to see that I had set up my TraitViewController as a UIPageViewController instead of UIViewController.. and so it didn't generate any errors, but it just took me to a black screen. Feel silly that I read through my code so many times and never noticed this.

    Main point: If you're getting a black screen on a ViewController randomly, make sure your class is extending the correct parent class. in my case:

    class TraitViewController: UIPageViewController {
    

    needed to be

    class TraitViewController: UIViewController {
    
    0 讨论(0)
提交回复
热议问题