2016-07-08 5 views
4

Я новичок в быстром и XCode, поэтому, пожалуйста, простите меня, вероятно, действительно грязный код! При запуске моего кода я получаю следующее предупреждение: Предупреждения: Попытка представить, на котором уже представляяПредупреждение: UIAlertController уже представляет

Я уже проверил форум и нашел пост по поводу этого вопроса .... Я применил помощь предложила, как в :

if presentedViewController !== nil { 
    self.presentViewController(alertController, animated: true, completion: nil) 
} else{ 
    self.dismissViewControllerAnimated(false, completion: nil) 
    self.presentViewController(alertController, animated: true, completion: nil) 
} 

Однако, это все равно дает мне такое же предупреждение ... Поэтому я думаю, что, должно быть, я сделал что-то не так. Было бы здорово, если бы кто-то может помочь мне, пожалуйста :) Кроме того, если есть какие-либо предложения о том, как я могу «убрать» до моего кода оценили :)

import UIKit 

class ViewController: UIViewController { 

@IBOutlet var Label: UILabel! 

@IBOutlet var ukFlag: UITextView! 

@IBOutlet var movie: UITextView! 

@IBOutlet var piano: UITextView! 

@IBOutlet var book: UITextView! 

@IBOutlet var dance: UITextView! 

@IBOutlet var paint: UITextView! 

@IBOutlet var row: UITextView! 

@IBOutlet var envelope: UITextView! 

@IBOutlet var dragon: UITextView! 

@IBOutlet var instagram: UITextView! 


func londonPuzzle(sender: UIPanGestureRecognizer) { 
    let translation = sender.translationInView(self.view) 
    sender.view!.center = CGPoint(x: sender.view!.center.x + translation.x, y: sender.view!.center.y + translation.y) 
    sender.setTranslation(CGPointZero, inView: self.view) 
     self.ifCollided() 


} 


func misleadOne(sender: UIPanGestureRecognizer) { 

    let translation = sender.translationInView(self.view) 
    sender.view!.center = CGPoint(x: sender.view!.center.x + translation.x, y: sender.view!.center.y + translation.y) 
    sender.setTranslation(CGPointZero, inView: self.view) 
    self.ifCollided() 

} 

func bestival(sender: UIPanGestureRecognizer) { 
    let translation = sender.translationInView(self.view) 
    sender.view!.center = CGPoint(x: sender.view!.center.x + translation.x, y: sender.view!.center.y + translation.y) 
    sender.setTranslation(CGPointZero, inView: self.view) 
     self.ifCollided() 

    } 

func rosieProject(sender: UIPanGestureRecognizer) { 
    let translation = sender.translationInView(self.view) 
    sender.view!.center = CGPoint(x: sender.view!.center.x + translation.x, y: sender.view!.center.y + translation.y) 
    sender.setTranslation(CGPointZero, inView: self.view) 
    self.ifCollided() 

} 

func misleadTwo(sender: UIPanGestureRecognizer) { 
    let translation = sender.translationInView(self.view) 
    sender.view!.center = CGPoint(x: sender.view!.center.x + translation.x, y: sender.view!.center.y + translation.y) 
    sender.setTranslation(CGPointZero, inView: self.view) 
    self.ifCollided() 

} 

func misleadThree(sender: UIPanGestureRecognizer) { 
    let translation = sender.translationInView(self.view) 
    sender.view!.center = CGPoint(x: sender.view!.center.x + translation.x, y: sender.view!.center.y + translation.y) 
    sender.setTranslation(CGPointZero, inView: self.view) 
    self.ifCollided() 

} 

func misleadFour(sender: UIPanGestureRecognizer) { 
    let translation = sender.translationInView(self.view) 
    sender.view!.center = CGPoint(x: sender.view!.center.x + translation.x, y: sender.view!.center.y + translation.y) 
    sender.setTranslation(CGPointZero, inView: self.view) 
    self.ifCollided() 

} 
func voucher(sender: UIPanGestureRecognizer) { 
    let translation = sender.translationInView(self.view) 
    sender.view!.center = CGPoint(x: sender.view!.center.x + translation.x, y: sender.view!.center.y + translation.y) 
    sender.setTranslation(CGPointZero, inView: self.view) 
    self.ifCollided() 

} 

func welsh(sender: UIPanGestureRecognizer) { 
    let translation = sender.translationInView(self.view) 
    sender.view!.center = CGPoint(x: sender.view!.center.x + translation.x, y: sender.view!.center.y + translation.y) 
    sender.setTranslation(CGPointZero, inView: self.view) 
    self.ifCollided() 

} 

func hulk(sender: UIPanGestureRecognizer) { 
    let translation = sender.translationInView(self.view) 
    sender.view!.center = CGPoint(x: sender.view!.center.x + translation.x, y: sender.view!.center.y + translation.y) 
    sender.setTranslation(CGPointZero, inView: self.view) 
    self.ifCollided() 

} 

func ShowAlertWrong(){ 

    let alertController = UIAlertController(title: "Sorry", message: " Guess again!", preferredStyle: .Alert) 

    let okAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default) { 
     UIAlertAction in 

     self.ukFlag.center = CGPointMake(150, 225) 
     self.movie.center = CGPointMake(150, 225) 
     self.piano.center = CGPointMake(150, 225) 
     self.dance.center = CGPointMake(150, 225) 
     self.paint.center = CGPointMake(150, 225) 
     self.row.center = CGPointMake(150, 225) 
     self.envelope.center = CGPointMake(150, 225) 
     self.dragon.center = CGPointMake(150, 225) 
     self.instagram.center = CGPointMake(150, 225) 
    } 

    let resetAction = UIAlertAction(title: "Reset", style: UIAlertActionStyle.Default) { 
     UIALertAction in 

     self.ukFlag.center = CGPointMake(150, 225) 
     self.movie.center = CGPointMake(150, 225) 
     self.piano.center = CGPointMake(150, 225) 
     self.dance.center = CGPointMake(150, 225) 
     self.paint.center = CGPointMake(150, 225) 
     self.row.center = CGPointMake(150, 225) 
     self.envelope.center = CGPointMake(150, 225) 
     self.dragon.center = CGPointMake(150, 225) 
     self.instagram.center = CGPointMake(150, 225) 

    } 

    alertController.addAction(okAction) 
    alertController.addAction(resetAction) 
    self.presentViewController(alertController, animated: true, completion: nil) 

} 




func ShowAlertWin(){ 



    let alertController = UIAlertController(title: "Congrats", message: " You are correct!", preferredStyle: .Alert) 

    let okAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default) { 
     UIAlertAction in 

     self.book.center = CGPointMake(150, 150) 


    } 

    /* let resetAction = UIAlertAction(title: "Reset and hope the mood has changed", style: UIAlertActionStyle.Default) { 
     UIALertAction in 

     self.Angry.center = CGPointMake(150, 150) 
    }*/ 

    alertController.addAction(okAction) 
    // alertController.addAction(resetAction) 
    if presentedViewController !== nil { 
     self.presentViewController(alertController, animated: true, completion: nil) 

    } else{ 
     self.dismissViewControllerAnimated(false, completion: nil) 
     self.presentViewController(alertController, animated: true, completion: nil) 
    } 



} 






@IBAction func ifCollided(){ 

if CGRectIntersectsRect(Label.frame, ukFlag.frame) { 
    ShowAlertWrong() 
} 
    else if CGRectIntersectsRect(Label.frame, movie.frame){ 
      ShowAlertWrong() 
     } else if CGRectIntersectsRect(Label.frame, piano.frame){ 
       ShowAlertWrong() 
     } else if CGRectIntersectsRect(Label.frame, dance.frame){ 
      ShowAlertWrong() 
} else if CGRectIntersectsRect(Label.frame, paint.frame){ 
    ShowAlertWrong() 
} else if CGRectIntersectsRect(Label.frame, row.frame){ 
    ShowAlertWrong() 
} else if CGRectIntersectsRect(Label.frame, envelope.frame){ 
    ShowAlertWrong() 
} else if CGRectIntersectsRect(Label.frame, dragon.frame){ 
    ShowAlertWrong() 
} else if CGRectIntersectsRect(Label.frame, instagram.frame){ 
    ShowAlertWrong() 
} else if CGRectIntersectsRect(Label.frame, book.frame){ 
    ShowAlertWin() 
} 


} 




override func viewDidLoad() { 
    super.viewDidLoad() 
    ukFlag.addGestureRecognizer(UIPanGestureRecognizer(target: self,  action: #selector(self.londonPuzzle(_:)))) 
    movie.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(self.misleadOne(_:)))) 
    piano.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(self.bestival(_:)))) 
    book.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(self.rosieProject(_:)))) 
    dance.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(self.misleadTwo(_:)))) 
    paint.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(self.misleadThree(_:)))) 
    row.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(self.misleadFour(_:)))) 
    envelope.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(self.voucher(_:)))) 
    dragon.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(self.welsh(_:)))) 
    instagram.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(self.hulk(_:)))) 


} 

} 

ответ

14

Вы должны изменить свой код, как это, присутствует второй alertController по завершении увольнения. Также измените условие if с моим.

if presentedViewController == nil { 
    self.presentViewController(alertController, animated: true, completion: nil) 
} else{ 
     self.dismissViewControllerAnimated(false) {() -> Void in 
      self.presentViewController(alertController, animated: true, completion: nil) 
     } 
} 

Надеюсь, это вам поможет.

+0

эй, спасибо за Ваш ответ! Он работает, однако, похоже, окно предупреждения появляется дважды очень быстро ... Я попытался исправить это, но я не уверен, как ... ему что-то нужно с ним входить в цикл дважды или что-то в этом роде? – CatiaV5

+0

Я не понимаю, что вы пытаетесь сказать, можете ли вы объяснить немного больше? –

+0

, если я перетаскиваю соответствующий символ на метке, тогда окно предупреждения открывается дважды подряд подряд (т. Е. Предупреждение «неправильное» всплывает, выключается и снова всплывает очень быстро). действительно ли мое объяснение имеет больше смысла? это очень сложно объяснить ... он просто открывается, закрывается и быстро открывается – CatiaV5

0

Попробуйте

if let presented = self.presentedViewController { 
    presented.removeFromParentViewController() 
    } 

if presentedViewController == nil { 
    self.present(alert, animated: true, completion: nil) 
    } 
0

Вы можете представить другой UIAlertController или что-нибудь еще вы хотите от текущей представленной UIAlertController. Создайте вспомогательную FUNC, чтобы получить наиболее заметный ViewController затем сделать настоящий вызов на что

func topVisibleViewController(viewController: UIViewController) -> UIViewController? { 
    let viewController = viewController ?? UIApplication.shared.keyWindow?.rootViewController 

    if let navigationController = viewController as? UINavigationController, !navigationController.viewControllers.isEmpty { 
     return visibleViewController(navigationController.viewControllers.last) 
    } 
    else if let tabBarController = viewController as? UITabBarController, 
     let selectedController = tabBarController.selectedViewController { 
     return visibleViewController(selectedController) 
    } 
    else if let presentedController = viewController?.presentedViewController { 
     return visibleViewController(presentedController) 
    } 

    return viewController 
}