2016-11-03 22 views
0

Я пытался выполнить SEGUE программно выполнив:SEGUE программно не работает

import UIKit 

class ViewController: UIViewController { 


    @IBOutlet weak var btnRedirect: UIButton! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     self.performSegueWithIdentifier("segueToSecond", sender: btnRedirect) 

    } 

    @IBAction func redirect(sender: AnyObject) { 
     self.performSegueWithIdentifier("segueToSecond", sender: self) 
    } 
} 

Проблема заключается в том, что переход работает отлично, нажав на кнопку, чтобы выполнить его, хотя, когда я пытаюсь это сделать программно, как вы можете видеть внутри метода viewDidLoad, он не работает!

Я уже пробовал пройти sender как nil.

+2

Вы не можете выполнить переход в 'viewDidLoad', сделайте это в' viewDidAppear', если вы хотите сделать это, как только вид появляется на экране – dan

+0

, мы получаем его, ваш вопрос о Swift. нет необходимости во всех случаях. – Alexander

+0

Код обновлен.лет, я знаю, что вы делаете ... – Joe

ответ

0

Как dan'S комментарий вы не можете выполнить segue в ViewDidLoad сделать это в viewDidAppears.?

Примечание: Перемещение выполнить переход от вашего ViewDidLoad к viewDidAppers или внутри кнопки действий, как показано ниже код и убедитесь, что вы установили свой идентификатор SEGUE в раскадровке, чтобы «segueToSecond» .Untested code.So, дайте мне знать. если у вас возникли проблемы с выполнением.

Обновлено:

Примечание: Если вы хотите, чтобы ваш SEGUE выполнять автоматически после просмотра нагрузок. вы должны подключить segue от VC к VC.

 @IBAction func redirect(sender: AnyObject) { 
    segueToSecondVC() 
} 


     func segueToSecondVC() { 
     self.performSegue(withIdentifier: "segueToSecond", sender: self) 
    } 

     override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

     if (segue.identifier == "segueToSecond") { 

     let dest = segue.destination as! viewTwo // viewTwo is your destination ViewController 
     print("Segue Performed") 

    } 

    } 

Обновлено:

Примечание: Если вы хотите SEGUE выполнить automatilcally после просмотра нагрузок вы можете установить некоторую задержку в вашей Segue из ниже кода.

 let delayInSeconds = 4.0 
    override func viewDidLoad() { 
    super.viewDidLoad() 

    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delayInSeconds) { 

    segueToSecondVC() 

    } 

    } 

Надеется, что это поможет вам решить эту проблему ....

+0

В этом примере нет необходимости применять метод подготовки к методу segue. –

+0

Он хочет сделать это программно mate.look в моей записке в нижней части моего ответа. – Joe

Смежные вопросы