web-dev-qa-db-fra.com

Le bouton gras iOS UIAlertController a été modifié en 8.3

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é?

49
Bbx

À 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.

99
Thi

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.

14
Josh Heald

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.

2
Vlad

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é est nil.


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)
2
Imanou Petit