2016-10-08 11 views
0

Я прочитал много разных сообщений по этому вопросу, но ни одно из решений, похоже, не работало для меня.Swift performSegueWithIdentifier показывает черный экран

Я начал новое приложение, и я разместил начальный ViewController внутри навигационного контроллера. Я создал второе представление и связал их вместе на раскадровке с помощью segue. Сегю работает успешно, и я вижу данные, которые я переношу в заявлении на печать со второго экрана, но на экране отображается черное.

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

Раскадровка: Link to image of my storyboard Мой переход устанавливается следующим образом: Link to image of my segue information

Кроме того, мои viewControllers названы WelcomeViewController и TraitViewController. У них есть идентификатор раскадровки приветствияVC и traitsVC.

Любая помощь будет невероятно оценена. Дайте мне знать, если вам нужна какая-либо другая информация.

+0

кажется нормально на первый взгляд. Любые ошибки в области отладки? – ronatory

+0

, когда вы переходите ко второму viewController, какой-либо выход регистрируется в области отладки? возможно, что-то вроде «Не удалось создать экземпляр контроллера по умолчанию» –

+0

[посмотреть] (https://www.google.co.in/?gws_rd=ssl#q=failed+to+instantiate+the+default+view+ контроллер +). – vaibhav

ответ

5

Я создал ваше приложение, и все работает, возможно, вы что-то пропустили, вот мое решение (Примечание: код находится в Swift 3.0, но его следует легко перенести в Swift 2. *):

раскадровка:

enter image description here

Установите segueToTraits идентификатор:

enter image description here

Установите класс TraitViewController как пользовательский класс в раскадровке:

enter image description here

Контроллер вид с кнопками:

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

} 

Результат:

enter image description here

Вы можете найти образец проекта here

+0

Вы серьезно удивителен, пройдя через это так подробно! Я действительно ценю твою помощь. Следуя твоим шагам, я обнаружил тупую ошибку, которую я совершил. Когда я делал TraitsViewController, я должен был выбрать неправильный тип ViewController (он был настроен на UIPageViewController), и поэтому segue выводил его на черный экран. Изменение его на обычный UIViewController устранило проблему. Человек, я чувствую себя немым прямо сейчас, lol. Во всяком случае, вы совершенно правы! Поэтому я постараюсь вам ответить правильно. Действительно, еще раз спасибо за вашу помощь! –

+0

Да, рад, что я мог вам помочь! Я думаю, вам не нужно чувствовать себя глупым, такие ошибки могут случиться. Поэтому просто не забывайте, может быть, сделать шаг назад и попытаться пройти шаги медленно, а затем вы найдете в основном решение ;-) – ronatory

2

Следуя инструкциям, которые @ronatory заложившие так хорошо для меня в принятом ответе, Мне удалось увидеть, что я установил свой TraitViewController как UIPageViewController вместо UIViewController .. и поэтому он не генерировал никаких ошибок, но он просто взял меня на черный sc Reen. Чувствуй себя глупо, что я много раз прочитывал свой код и никогда не замечал этого.

Главное: если вы случайно получаете черный экран на ViewController, убедитесь, что ваш класс расширяет правильный родительский класс. в моем случае:

class TraitViewController: UIPageViewController { 

нужно быть

class TraitViewController: UIViewController {