выполните segue в viewDidLoad () без навигационного контроллера в Swift

у меня есть три вида (вид 1 проверяет соединение с сервером, вид 2 показывает основное содержимое, вид3 показывает страницу поддержки), и я создал их в раскадровке без кодирования. При запуске приложения iOS в представлении 1 отображается счетчик при проверке соединения с сервером. Если проверка соединения пройдена, я хочу перейти к просмотру 2, и если это не удалось, я хочу перейти к просмотру 3. Представление 1 предназначено только для проверки соединения, и я не хочу возвращаться к этому представлению. Так что, думаю, мне не нужно ... навигационный контроллер, или?

в раскадровке я подключил весь вид с seques. На мой взгляд контроллер вида 1 делаю так:

override func viewDidLoad() {
    super.viewDidLoad()

    let result:Bool = server.isServerAvailable(myURL)

    if (result == true) {
        performSegueWithIdentifier("ConnectionCheckToMain", sender: self)
    }
    else {
        performSegueWithIdentifier("ConnectionCheckToSupport", sender: self)
    }
}

но этот переход в viewDidLoad() функция не работает, но я не знаю, почему. Я добавил кнопку на view, чтобы проверить его. Я реализовал тот же код, что и в viewDidLoad() и он отлично работает. При нажатии на кнопку загружается следующий вид.

есть ли идеи, почему код не работает?

3 ответов


вы можете использовать этот код для навигации.

    let vc : UIViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ConnectionCheckToMain") as! UIViewController;
    self.presentViewController(vc, animated: true, completion: nil)

этот код решить для меня (Swift 3) с помощью "segue" (пожалуйста, замените "ConnectionCheckToMain" с вашим именем segue.

DispatchQueue.main.async(execute: {
  self.performSegue(withIdentifier: "ConnectionCheckToMain", sender: nil)
  })

У меня была такая же проблема и я ее решила с помощью этого кода:

dispatch_async(dispatch_get_main_queue(), { () -> Void in   
            let viewController:UIViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ViewControllerClassId") as! ViewControllerClassName
            self.presentViewController(viewController, animated: true, completion: nil)
        })