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