Swift PerformSegueWithIdentifier显示黑屏 [英] Swift performSegueWithIdentifier shows black screen

查看:122
本文介绍了Swift PerformSegueWithIdentifier显示黑屏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经阅读了许多有关此问题的不同文章,但是似乎没有一种解决方案对我有用.

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

欢迎屏幕:

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.

任何帮助都会令人感激.让我知道您是否需要其他信息.

解决方案

我已经构建了您的应用,并且一切正常,也许您错过了一些东西,这是我的解决方案(注意:代码在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)
  }

}

特征视图控制器:

import UIKit

class TraitViewController: UIViewController {


  var gender: String = ""

  override func viewDidLoad() {
    super.viewDidLoad()

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

}

结果:

您可以在此处

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 ViewController inside a navigation controller. I created a second view and linked them together on the storyboard with a segue. The segue works successfully, and I can see the data I am transferring in a print statement from the second screen, but the screen shows black.

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

Storyboard: Link to image of my storyboard My segue is set as follows: Link to image of my segue information

Also, my viewControllers are named WelcomeViewController and TraitViewController. They have storyboard id's of welcomeVC and traitsVC.

Any help would be incredibly appreciated. Let me know if you need any other information.

解决方案

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

这篇关于Swift PerformSegueWithIdentifier显示黑屏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆