UIAlertController avec deux boutons avec des styles définis:
UIAlertActionStyle.Cancel
UIAlertActionStyle.Default
dans iOS 8.2, le bouton Annuler n'est pas en gras et par défaut est en gras. Dans iOS 8.3, ils ont basculé
Vous pouvez le voir les propres applications d'Apple, par exemple, Paramètres> Mail> Ajouter un compte> iCloud> entrez des données non valides, puis cela apparaît comme ceci sur 8.3:
Non pris en charge Apple ID
En savoir plus (gras) OK (non gras)
alors que c'était l'inverse pour 8.2.
Toute solution de contournement pour le rendre à nouveau comme 8.2. Pourquoi a-t-il changé?
À partir d'iOS 9, vous pouvez définir la valeur preferredAction
sur l'action dont vous souhaitez que le titre du bouton soit en gras.
let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)
let OKAction = UIAlertAction(title: "OK", style: .Default, handler: nil)
alert.addAction(cancelAction)
alert.addAction(OKAction)
alert.preferredAction = OKAction
presentViewController(alert, animated: true) {}
Le bouton OK qui se trouve à droite sera en gras.
Il s'agit d'une modification intentionnelle du SDK. Je viens d'avoir une réponse de Apple à ce radar sur le problème, déclarant que:
Il s'agit d'un changement intentionnel - le bouton d'annulation doit être mis en gras dans les alertes.
Je ne trouve rien dans les différents journaux des modifications le mentionnant, malheureusement.
Nous devrons donc apporter des modifications à nos applications à certains endroits pour donner un sens à certaines choses.
Je viens de vérifier dans iOS 8.2: un premier bouton ajouté n'est pas en gras et un second bouton ajouté est en gras. Avec ce code, un bouton d'annulation sera en gras:
[alertController addAction:[UIAlertAction actionWithTitle:@"Ok"
style:UIAlertActionStyleDefault
handler:nil]];
[alertController addAction:[UIAlertAction actionWithTitle:@"Cancel"
style:UIAlertActionStyleCancel
handler:nil]];
Et avec ce code, un bouton par défaut sera en gras:
[alertController addAction:[UIAlertAction actionWithTitle:@"Cancel"
style:UIAlertActionStyleCancel
handler:nil]];
[alertController addAction:[UIAlertAction actionWithTitle:@"Ok"
style:UIAlertActionStyleDefault
handler:nil]];
Je ne peux pas archiver iOS 8.3 maintenant, mais ce comportement peut être une raison.
Depuis iOS 9, UIAlertController
possède une propriété appelée preferredAction
. preferredAction
a la déclaration suivante:
var preferredAction: UIAlertAction? { get set }
Action préférée que l'utilisateur doit effectuer à partir d'une alerte. [...] L'action privilégiée est pertinente pour le
UIAlertController.Style.alert
style uniquement; il n'est pas utilisé par les feuilles d'action. Lorsque vous spécifiez une action préférée, le contrôleur d'alerte met en surbrillance le texte de cette action pour lui donner de l'emphase. (Si l'alerte contient également un bouton d'annulation, l'action préférée reçoit la mise en surbrillance au lieu du bouton d'annulation.) [...] La valeur par défaut de cette propriété estnil
.
L'exemple de code Swift 5/iOS 12 ci-dessous montre comment afficher un UIAlertController
qui mettra en évidence le texte d'un UIAlertAction
spécifié en utilisant preferredAction
:
let alertController = UIAlertController(title: "Title", message: "Message", preferredStyle: .alert)
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
let okAction = UIAlertAction(title: "OK", style: .default, handler: { action in
print("Hello")
})
alertController.addAction(cancelAction)
alertController.addAction(okAction)
alertController.preferredAction = okAction
present(alertController, animated: true, completion: nil)