Как правильно использовать функцию executeSegue, вид контроллера появляется через несколько секунд? - PullRequest
0 голосов
/ 28 января 2019

enter image description here В текущем контроллере вида есть 3 кнопки и их метки меняются случайным образом, поэтому, когда пользователь нажимает кнопку, мне нужно проверить метку кнопки, если она правильная, мне нужно перейти к какому-либо контроллеру видаи если это неправильно, мне нужно перейти к другому контроллеру представления.

вот код для одной кнопки, другие кнопки имеют аналогичный код, за исключением имен переменных.

  @IBAction func click2(_ sender: Any) {

    if (opt2.titleLabel?.text) != nil {
        let userAnswer=opt2.titleLabel?.text;

        if ((userAnswer!.elementsEqual(self.optionsArray[0])) == true)
        {
            playSound(fileName: "kidsCheering")
            self.performSegue(withIdentifier: "sucessMessageSegue", sender: nil)
        }
        else {
            self.performSegue(withIdentifier: "wrongMessgeSegue", sender: nil)
        }



        }
    }

это код одного из контроллеров представления, к которому я обращаюсь, а другой аналогичен: import UIKit

class wrongMessageViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()


    }



}

это ошибка, которую я получил оттерминал

Предупреждение: попытка представить Proximity.QuestionViewController: на Proximity.ViewController: который уже присутствует

1 Ответ

0 голосов
/ 28 января 2019

РЕДАКТИРОВАТЬ -----------------------------------

После дополнительных обновлений

Вы не можете представить контроллер представления из контроллера представления, который уже представлен, поэтому либо используйте другой стиль segue, либо обрабатывайте его правильно.

Попытка представить UIViewController, когда другой UIViewController представлен всемвам нужно закрыть существующий UIViewController и затем представить новый

. Вы также можете попробовать что-то вроде этого ... Добавить это в свой mainViewController в ViewDidLoad ()

definesPresentationContext = true

ОБНОВЛЕНИЕ ----------

Вы пытались сделать что-то вроде этого

override func viewDidDisappear(_ animated: Bool) {

    if ViewController.isActive == true {

        ViewController.isActive = false

    }
}

или как это ..

self.searchController.dismiss(animated: false) { 
    self.performSegue(withIdentifier: "<YOUR SEGUE IDENTIFIER>", sender: cell)
}

или добавлениеэто где вы предпринимаете действия, чтобы переходить

if searchController.isActive {
    self.searchController.dismiss(animated: false) { 
        // Do what you want here like perform segue or present
    }
}

Это в основном то же самое, что и другие.добавление в основную диспетчерскую ... но это не лучшая практика

DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
     //dismiss and present new one
}
...