【问题标题】:Swift performSegueWithIdentifier shows black screenSwift performSegueWithIdentifier 显示黑屏
【发布时间】:2016-10-08 07:30:16
【问题描述】:

我已经阅读了很多关于这个问题的不同帖子,但似乎没有一个解决方案适合我。

我启动了一个新应用程序,并将初始 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

另外,我的 viewController 被命名为 WelcomeViewController 和 TraitViewController。他们有 welcomeVC 和 traitsVC 的故事板 ID。

任何帮助都将不胜感激。如果您需要任何其他信息,请告诉我。

【问题讨论】:

  • 乍一看似乎还可以。调试区有错误吗?
  • 当您导航到第二个视图控制器时,调试区域是否记录了任何输出?可能类似于“无法实例化默认视图控制器”
  • 显示区没有任何输出,没有弹出调试问题。我会查看您发送给@vaibhav 的搜索链接,看看是否有任何结果符合我的问题。
  • 我赞成以下解决您的问题,您看不到吗?

标签: swift screen viewcontroller


【解决方案1】:

通过遵循@ronatory 在接受的答案中为我精心布置的步骤,我能够看到我已将我的 TraitViewController 设置为 UIPageViewController 而不是 UIViewController.. 所以它没有生成任何错误,但它只是让我进入黑屏。感觉很傻,我读了很多遍我的代码却从来没有注意到这一点。

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

class TraitViewController: UIPageViewController {

需要

class TraitViewController: UIViewController {

【讨论】:

    【解决方案2】:

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

    结果:

    您可以找到示例项目here

    【讨论】:

    • 您如此详细地完成了这件事,真是太棒了!我真的很感谢你的帮助。按照你的步骤,我发现我犯了一个愚蠢的错误。当我制作 TraitsViewController 时,我一定选择了错误类型的 ViewController(它被设置为 UIPageViewController),因此 segue 将它带到了黑屏。将其更改为常规 UIViewController 解决了问题.. 伙计,我现在感觉很愚蠢,哈哈。无论如何,你是完全正确的!所以我会把你的答案标记为正确。真的,再次感谢您的帮助!
    • 是的,很高兴我能帮助你!我认为您不必感到愚蠢,这种错误可能会发生。所以别忘了,也许退后一步,试着再慢慢走一遍,然后你最终会找到解决方案;-)
    猜你喜欢
    • 1970-01-01
    • 2011-01-11
    • 2012-01-15
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多