Vous pouvez présenter un à UIAlertController
partir d'un popover en utilisant UIPopoverPresentationController
.
En Obj-C:
UIViewController *self; // code assumes you're in a view controller
UIButton *button; // the button you want to show the popup sheet from
UIAlertController *alertController;
UIAlertAction *destroyAction;
UIAlertAction *otherAction;
alertController = [UIAlertController alertControllerWithTitle:nil
message:nil
preferredStyle:UIAlertControllerStyleActionSheet];
destroyAction = [UIAlertAction actionWithTitle:@"Remove All Data"
style:UIAlertActionStyleDestructive
handler:^(UIAlertAction *action) {
// do destructive stuff here
}];
otherAction = [UIAlertAction actionWithTitle:@"Blah"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
// do something here
}];
// note: you can control the order buttons are shown, unlike UIActionSheet
[alertController addAction:destroyAction];
[alertController addAction:otherAction];
[alertController setModalPresentationStyle:UIModalPresentationPopover];
UIPopoverPresentationController *popPresenter = [alertController
popoverPresentationController];
popPresenter.sourceView = button;
popPresenter.sourceRect = button.bounds;
[self presentViewController:alertController animated:YES completion:nil];
Modification pour Swift 4.2, bien qu'il existe de nombreux blogs disponibles pour le même mais cela peut vous faire gagner du temps pour aller les chercher.
if let popoverController = yourAlert.popoverPresentationController {
popoverController.sourceView = self.view //to set the source of your alert
popoverController.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0) // you can set this as per your requirement.
popoverController.permittedArrowDirections = [] //to hide the arrow of any particular direction
}
Sur iPad, l'alerte sera affichée sous forme de popover à l'aide du nouveau UIPopoverPresentationController , elle nécessite que vous spécifiiez un point d'ancrage pour la présentation du popover à l'aide de sourceView et sourceRect ou de barButtonItem
Afin de spécifier le point d'ancrage, vous devrez obtenir une référence au UIPopoverPresentationController d'UIAlertController et définir l'une des propriétés comme suit:
exemple de code:
la source
Dans Swift 2, vous voulez faire quelque chose comme ça pour l'afficher correctement sur iPhone et iPad:
Si vous ne définissez pas le présentateur, vous vous retrouverez avec une exception sur iPad
-[UIPopoverPresentationController presentationTransitionWillBegin]
avec le message suivant:la source
Mise à jour pour Swift 3.0 et supérieur
la source
Mise à jour 2018
Je viens de faire rejeter une application pour cette raison et une résolution très rapide consistait simplement à passer d'une feuille d'action à une alerte.
A fonctionné un charme et a passé les testeurs de l'App Store très bien.
Peut ne pas être une réponse appropriée pour tout le monde, mais j'espère que cela aidera rapidement certains d'entre vous à sortir d'un cornichon.
la source
Swift 4 et supérieur
J'ai créé une extension
Comment utiliser:
la source
Voici une solution rapide:
la source
Swift 5
J'ai utilisé le style "feuille d'actions" pour iPhone et "alerte" pour iPad. L'iPad s'affiche au centre de l'écran. Pas besoin de spécifier sourceView ou d'ancrer la vue n'importe où.
Edit: par suggestion de ShareToD, mise à jour obsolète de la vérification "UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiom.pad"
la source
Pour moi, j'avais juste besoin d'ajouter ce qui suit:
la source
Ajoutez simplement le code suivant avant de présenter votre feuille d'action:
la source