UIAlertController не работает в режиме запуска в Swift 3

Кажется, я не могу получить всплывающее окно с предупреждением при запуске моего представления. Код ниже.

import UIKit

class StartController: UIViewController
{
    override func viewDidLoad()
    {
        super.viewDidLoad()

        self.view.backgroundColor = UIColor.white;

        startTest();
    }

    func startTest()
    {
        let alerta = UIAlertController(title: "Invalid Test", message: "Testing alert controller", preferredStyle: UIAlertControllerStyle.alert);

        alerta.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil));

        self.present(alerta, animated: true, completion: nil);
    }
}

3 ответа

Решение

Проблема в том, что в viewDidLoad иерархия представления не полностью установлена. Если вы используете viewDidAppear, то иерархия установлена.

Если вы действительно хотите вызвать это предупреждение в viewDidLoad, вы можете сделать это, поместив вызов презентации в этот блок GCD, чтобы вызвать небольшую задержку.

 DispatchQueue.main.async {
    // Run UI Updates or call completion block
      startTest()
 }

или использовать в

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    startTest()
}

Позвоните startTest() в viewDidAppear метод. Меня устраивает.

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    startTest()
}


func startTest()
{
    let alerta = UIAlertController(title: "Invalid Test", message: "Testing alert controller", preferredStyle: UIAlertControllerStyle.alert);

    alerta.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil));

    self.present(alerta, animated: true, completion: nil);
}

Просто попробуйте надеть это viewDidAppear: метод

override func viewDidAppear(_ animated: Bool)  {
      super.viewDidAppear(animated)
       startTest()
}
Другие вопросы по тегам