2015-11-16 1 views
1

Я хочу иметь UIAlertViewController, который представляет какой-то текст, и когда вы нажимаете «ok», это вызывает появление еще одного UIAlertController, и он представит пользователю два варианта на выбор (перейдите на главную, перезапустите игру). это код, который я написал, и это вызывает эту ошибку:Возможно ли, чтобы AlertViewController был представлен за другим?

"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); 


} 

ответ

2

Это примерно делает то, что вы хотите. Просто убедитесь, что вы не вызываете его в 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) { 
     // ... 
    } 
} 

По существу, я просто установил, чтобы второе представление отображалось в OKAction первого alertController.

+0

работает как очарование! Спасибо! (немного изменил его, поместил код в метод, который будет вызываться в конце игры, и он отлично работает). Просто не думал об использовании опции «отменить» перед вызовом другого контроллера предупреждения. –

+0

@TaliKatzman Нет проблем. Как я уже сказал, это немного грубо, но с некоторой очисткой он должен быть более читабельным. Если бы я был вами, я бы подумал о представлении модального представления, а не о нескольких предупреждениях. Таким образом, вы, возможно, имеете дело со всем, что хотите, с более удобной UX на одном представлении, если во всем мире не появится много вещей. Только мои 50 центов. – Gordonium

Смежные вопросы