仅当viewDidAppear完成调用时,UIAlertController才可见

我试图在我的视图加载时显示UIAlertController 。 我知道在viewDidLoad()viewWillAppear()期间这是不可能的,因为在执行这些函数期间视图不在层次结构中。 但是,如果在viewDidAppear()之前添加视图,则应该可以在调用该函数期间显示我的UIAlertController

因此,我试过这个:

 override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) var AlertShow = false print(Configuration) if !AlreadyLoad { if Configuration.count == 0 { AlertShow = true print("First lunch") let Alert = UIAlertController(title: "Premier lancement", message: "C'est la première fois que l'application est lancée. Cette dernière va télécharger tous les articles.\nVeuillez patienter.", preferredStyle: .Alert) let OkAction = UIAlertAction(title: "Ok", style: .Default) { (action) in } Alert.addAction(OkAction) self.presentViewController(Alert, animated: true, completion: { AlertShow = false }) } } 

但我的警报仅在执行viewDidAppear()后才可见。 我想在开始时显示此警报。

我使用的是Swift 2,Xcode 7和iOS 9 SDK。

呈现独立于任何视图控制器的UIAlertController的方法是创建新的UIWindow和rootViewController,并将其置于当前的UIWindow之上。 这里推荐使用此方法。 不在视图控制器中时如何呈现UIAlertController?

如果你想看到实现。 你可以看看这里。 它很简单,但效果很好。 我将这个想法转换为目标c并在我的应用程序中使用它。 这是Dylan Bettermann的快速版本: https : //github.com/dbettermann/DBAlertController

我尝试了DBAlertController方法,但是出现了另一个错误,我这样做了:

 var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. //Notification demand application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)) File.changeCurrentDirectoryPath(Path[0]) CreateFile.changeCurrentDirectoryPath(Path[0]) UIApplication.sharedApplication().canOpenURL(NSURL(fileURLWithPath: "fbauth://authorize")) //deleteAllFile() window = UIWindow(frame: UIScreen.mainScreen().bounds) window!.rootViewController = UINavigationController(rootViewController: ViewController2()) window!.makeKeyAndVisible() return true } 

在viewController2()中我这样做:

 @IBOutlet var OptionButton: UIBarButtonItem! override func viewDidLoad() { super.viewDidLoad() ReadAllFile() let alertController = DBAlertController(title: "DBAlertController", message: "Hello World!", preferredStyle: .Alert) alertController.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil)) alertController.show(animated: true, completion: nil) OptionButton.title = "\u{2699}" } 

但我的OptionButton是零(我链接),我得到了致命错误。