Swift performSegueWithIdentifier 显示黑屏
Swift performSegueWithIdentifier shows black screen
我已经阅读了很多关于这个问题的不同帖子,但是 none 的解决方案似乎对我有用。
我启动了一个新应用程序,并将初始 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)
}
故事板:
Link to image of my storyboard
我的segue设置如下:
Link to image of my segue information
另外,我的 viewControllers 被命名为 WelcomeViewController 和 TraitViewController。他们有 welcomeVC 和 traitsVC 的故事板 ID。
任何帮助将不胜感激。如果您需要任何其他信息,请告诉我。
我已经构建了你的应用程序并且一切正常,也许你错过了什么,这是我的解决方案 (注意:代码在 Swift 3.0 中,但应该很容易采用它到 Swift 2.*):
故事板:
设置 segueToTraits 标识符:
在故事板中将 TraitViewController class 设置为自定义 class:
带有按钮的视图控制器:
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)")
}
}
结果:
您可以找到示例项目here
按照@ronatory 在已接受的答案中为我精心安排的步骤,我能够看到我已将 TraitViewController 设置为 UIPageViewController UIViewController.. 所以它没有产生任何错误,但它只是把我带到黑屏。感觉很傻,我通读了我的代码很多次,却从来没有注意到这一点。
要点:如果您在 ViewController 上随机出现黑屏,请确保您的 class 正在扩展正确的父级 class。
就我而言:
class TraitViewController: UIPageViewController {
需要
class TraitViewController: UIViewController {
我已经阅读了很多关于这个问题的不同帖子,但是 none 的解决方案似乎对我有用。
我启动了一个新应用程序,并将初始 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)
}
故事板: Link to image of my storyboard 我的segue设置如下: Link to image of my segue information
另外,我的 viewControllers 被命名为 WelcomeViewController 和 TraitViewController。他们有 welcomeVC 和 traitsVC 的故事板 ID。
任何帮助将不胜感激。如果您需要任何其他信息,请告诉我。
我已经构建了你的应用程序并且一切正常,也许你错过了什么,这是我的解决方案 (注意:代码在 Swift 3.0 中,但应该很容易采用它到 Swift 2.*):
故事板:
设置 segueToTraits 标识符:
在故事板中将 TraitViewController class 设置为自定义 class:
带有按钮的视图控制器:
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)")
}
}
结果:
您可以找到示例项目here
按照@ronatory 在已接受的答案中为我精心安排的步骤,我能够看到我已将 TraitViewController 设置为 UIPageViewController UIViewController.. 所以它没有产生任何错误,但它只是把我带到黑屏。感觉很傻,我通读了我的代码很多次,却从来没有注意到这一点。
要点:如果您在 ViewController 上随机出现黑屏,请确保您的 class 正在扩展正确的父级 class。 就我而言:
class TraitViewController: UIPageViewController {
需要
class TraitViewController: UIViewController {