2016-04-13 4 views
0

Je dois rejeter un AlertView lorsque l'utilisateur touche n'importe où en dehors de ses limites.Comment supprimer un UIAlertView lorsque vous touchez un objet en dehors de celui-ci?

Je sais que vous devez appeler

alert.dismissViewControllerAnimated(true, completion: nil) 

à rejeter la AlertView, mais comment puis-je le faire que lorsque l'utilisateur touche nulle part ailleurs qu'à l'un des deux boutons qui font partie de la vue?

C'est le code que j'ai après la suggestion de Steve:

presentViewController(alert, animated: true, completion: nil) 
    //Add gesture recognizer for alert ViewController when adding an event 
    let tapGesture = UITapGestureRecognizer(target: self, action: "alertClose:") 
    view.addGestureRecognizer(tapGesture) 
    //dismiss the alert if the user click anywhere except the buttons 
    func alertClose(gesture: UITapGestureRecognizer) { 
     alert.dismissViewControllerAnimated(true, completion: nil) 
    } 
+0

pouvez-vous ajouter un UITapGestureRecognizer pour voir et ensuite cet appel d'action de l'alerte. dismissViewControllerAnimated? – Steve

+1

Peut-être que vous pouvez afficher une alerte personnalisée. – simalone

Répondre

2

lorsque vous présentez votre alerte d'appel avec un gestionnaire d'achèvement comme celui-ci:

self.presentViewController(alert, animated: true, completion:{ 
     alert.view.superview?.userInteractionEnabled = true 
     alert.view.superview?.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.alertClose(_:)))) 
}) 

Note: Pre Swift 2.2 remplacer

#selector(self.alertClose(_:)) 

avec

Selector("alertClose") 

puis créez votre alerte fonction proche:

func alertClose(gesture: UITapGestureRecognizer) { 
    self.dismissViewControllerAnimated(true, completion: nil) 
} 

J'ai testé cela avec rapide 2.2 sur un iPhone 6

+0

cela devrait fonctionner, il suffit de faire une référence à votre alerte –

+0

J'ai essayé ce code, mais il ne semble pas fonctionner. Est-ce que j'appelle presentViewController avant ou après le code ci-dessus? – ZDaws

+0

Je reçois un avertissement: Aucune méthode déclarée avec le sélecteur Objective-C 'alertClose:' – ZDaws