Je souhaite fermer mon UIAlertViewController en tapant à l'extérieur du contrôleur UIAlertView, en tapant sur l'espace de l'écran noir. J'ai essayé ceci:Quitter UIAlertViewController en tapant à l'extérieur
self.presentViewController(alertViewController, animated: true, completion:{
alertViewController.view.superview?.userInteractionEnabled = true
alertViewController.view.superview?.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.alertClose(_:))))
})
mais il se ferme juste si j'ai tapé sur UIAlertViewController. Mais je veux à l'extérieur, où l'écran demi-noir a tapé.
Est-ce possible?
MISE À JOUR
@IBAction func shareButtonTapped(sender: UIButton) {
let alertViewController = UIAlertController(title: "Share on social networks", message: "Where do you want to share?", preferredStyle: .ActionSheet)
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissAlertView:")
self.view.addGestureRecognizer(tapGestureRecognizer)
let facebookAction = UIAlertAction(title: "Facebook", style: .Default) { (alert: UIAlertAction) -> Void in
}
let twitterAction = UIAlertAction(title: "Twitter", style: .Default) { (alert: UIAlertAction) -> Void in
}
let cancelAction = UIAlertAction(title: "Cancel", style: .Destructive) { (alert: UIAlertAction) -> Void in
}
alertViewController.addAction(facebookAction)
alertViewController.addAction(twitterAction)
alertViewController.addAction(cancelAction)
self.presentViewController(alertViewController, animated: true, completion:{
alertViewController.view.superview?.userInteractionEnabled = true
alertViewController.view.superview?.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.alertClose(_:))))
})
}
fonction AlertClose:
func alertClose(gesture: UITapGestureRecognizer) {
self.dismissViewControllerAnimated(true, completion: nil)
}
Déposez votre 'alertClose' fonction. – Code
Je présume que vous voulez dire UIAlertController? Vous devrez peut-être sous-classer UIAlertController, définissez le délégué GestureRecognizer sur self, de sorte que vous puissiez ensuite redéfinir shouldReceiveTouches :. De cette façon, vous pouvez retourner false lorsque le toucher est sur la fenêtre principale. Cela devrait vous donner l'effet désiré. – aronspring
@Code terminé! J'ai ajouté d'autres parties de mon code – John