是否可以让一个 AlertViewController 接一个出现?

Is it possible to have an AlertViewController be presented after another?

我想要一个显示一些文本的 UIAlertViewController,当您单击 "ok" 时,它会弹出另一个 UIAlertController,它将向用户提供两个选项选择(转到主要,重新启动游戏)。这是我写的代码,它引发了这个错误:

"2015-11-16 22:29:21.438 MemoryCardGameTest_01[1917:46708] Warning: Attempt to present on which is already presenting (null)"

 func showWinMessage() {

    let userMessage = UIAlertController(title: "Victory! you win with... clicks \(ref2.clickCounter) and \(ref2.timeCounter) seconds", message: "", preferredStyle: UIAlertControllerStyle.Alert);

    let action = UIAlertAction(title: "ok", style: UIAlertActionStyle.Default) { (action: UIAlertAction!) -> Void in

    }

    userMessage.addAction(action);

    self.presentViewController(userMessage, animated: true, completion: nil);


    println("victory achieved");


}

func showUserMessage(){
    let newMessage = UIAlertController(title: "whatwouldyouliketodonext?", message: "", preferredStyle: UIAlertControllerStyle.Alert);

    let goToUI = UIAlertAction(title: "goToUI", style: UIAlertActionStyle.Default) { (action: UIAlertAction!) -> Void in
        println("gotoUI was clicked");

    }

    let playAgain = UIAlertAction(title: "PlayAgain", style: UIAlertActionStyle.Default) { (action: UIAlertAction!) -> Void in
        println("playAgain was clicked");
    }

    newMessage.addAction(goToUI);
    newMessage.addAction(playAgain);

    self.presentViewController(newMessage, animated: true, completion: nil);


}

这大致可以满足您的要求。请确保您没有在 viewDidLoad 中调用它,因为您可能会遇到您提到的错误。试试 viewDidAppear 之类的。

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    let alertController = UIAlertController(title: "First message", message: "This is the first message", preferredStyle: .Alert)

    let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (action) in
        // ...
    }
    alertController.addAction(cancelAction)

    let OKAction = UIAlertAction(title: "OK", style: .Default) { (action) in
        let alertController = UIAlertController(title: "Second message", message: "This is the second message", preferredStyle: .Alert)

        let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (action) in
            // ...
        }
        alertController.addAction(cancelAction)

        let OKAction = UIAlertAction(title: "OK", style: .Default) { (action) in
            // ...
        }
        alertController.addAction(OKAction)

        self.presentViewController(alertController, animated: true) {
            // ...
        }
    }
    alertController.addAction(OKAction)

    self.presentViewController(alertController, animated: true) {
        // ...
    }
}

基本上我只是将第二个视图设置为出现在第一个 alertController 的 OKAction 中。