J'utilise le nouveau UIAlertController pour afficher les alertes. J'ai ce code:
// nil titles break alert interface on iOS 8.0, so we'll be using empty strings
UIAlertController *alert = [UIAlertController alertControllerWithTitle: title == nil ? @"": title message: message preferredStyle: UIAlertControllerStyleAlert];
UIAlertAction *defaultAction = [UIAlertAction actionWithTitle: cancelButtonTitle style: UIAlertActionStyleCancel handler: nil];
[alert addAction: defaultAction];
UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
[rootViewController presentViewController:alert animated:YES completion:nil];
Maintenant, je veux changer le titre et la police du message, la couleur, la taille, etc. Quelle est la meilleure façon de procéder?
Edit: je devrais insérer le code entier. J'ai créé une catégorie pour UIView que je pourrais afficher la bonne alerte pour la version iOS.
@implementation UIView (AlertCompatibility)
+( void )showSimpleAlertWithTitle:( NSString * )title
message:( NSString * )message
cancelButtonTitle:( NSString * )cancelButtonTitle
{
float iOSVersion = [[UIDevice currentDevice].systemVersion floatValue];
if (iOSVersion < 8.0f)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: title
message: message
delegate: nil
cancelButtonTitle: cancelButtonTitle
otherButtonTitles: nil];
[alert show];
}
else
{
// nil titles break alert interface on iOS 8.0, so we'll be using empty strings
UIAlertController *alert = [UIAlertController alertControllerWithTitle: title == nil ? @"": title
message: message
preferredStyle: UIAlertControllerStyleAlert];
UIAlertAction *defaultAction = [UIAlertAction actionWithTitle: cancelButtonTitle
style: UIAlertActionStyleCancel
handler: nil];
[alert addAction: defaultAction];
UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
[rootViewController presentViewController:alert animated:YES completion:nil];
}
}
ios
objective-c
ios8
uialertview
uialertcontroller
Libor Zapletal
la source
la source
DISCLAIMER:
À tous ceux qui lisent les réponses ci-dessous. Apple rejettera vos applications. Si vous avez tendance à utiliser des API privées. Et dans les réponses ci-dessous C'EST CE QUI SE PASSE ..Réponses:
Je ne sais pas si cela va à l'encontre des API / propriétés privées, mais l'utilisation de KVC fonctionne pour moi sur ios8
Pour mémoire, il est également possible de modifier la police de l'action d'alerte, en utilisant ces API privées. Encore une fois, votre application peut être rejetée, je n'ai pas encore essayé de soumettre un tel code.
Pour Swift 4.2 dans XCode 10 et plus, les 2 dernières lignes sont maintenant:
la source
attributedTitle
pour le titre etattributedMessage
pour le message. Je ne sais pas si c'est la meilleure solution mais pour l'instant c'est assez bien pour moi.UIAlertController
. Comment faire de même avecUIAlertAction
?Vous pouvez modifier la couleur du bouton en appliquant une couleur de teinte à un UIAlertController.
Sur iOS 9, si la couleur de teinte de la fenêtre a été définie sur une couleur personnalisée, vous devez appliquer la couleur de teinte juste après avoir présenté l'alerte. Sinon, la couleur de teinte sera réinitialisée à votre couleur de teinte de fenêtre personnalisée.
la source
Vous pouvez changer la couleur du texte du bouton en utilisant ce code:
Peut-être que cela vous aidera.
la source
Production
la source
Une traduction rapide de la réponse @ dupuis2387. Élaboration de la syntaxe pour définir la
UIAlertController
couleur et la police du titre via KVC à l'aide de laattributedTitle
clé.la source
tintColor
surview
ou viaappearanceWhenContainedIn
, mais la teinte disparaît dès que vous la touchez. Toujours à la recherche de réponses.self.presentViewController(alertController, animated: true, completion: nil)
pouvons-nous changer la police du bouton "OK"?Utilisez le
UIAppearance
protocole. Exemple de définition d'une police - créez une catégorie à étendreUILabel
:Et son utilisation:
Testé et travaillé avec style
UIAlertControllerStyleActionSheet
, mais je suppose que cela fonctionnera avecUIAlertControllerStyleAlert
aussi.PS Mieux vaut vérifier la disponibilité des classes au lieu de la version iOS:
la source
Utilisez le
UIAppearance
protocole. Faites plus de hacks avecappearanceFont
pour changer la police pourUIAlertAction
.Créer une catégorie pour
UILabel
UILabel + FontAppearance.h
UILabel + FontAppearance.m
Usage:
ajouter
[[UILabel appearanceWhenContainedIn:UIAlertController.class, nil] setAppearanceFont:nil];
en
AppDelegate.m
pour le faire fonctionner pour tousUIAlertController
.la source
if (self.font.pointSize == 13 && isBold) {
UIAlertAction
. Mais pour autant que je sache,UIAlertAction
n'utilise pas de fichierUILabel
. Il utilise un fichierNSString
. github.com/nst/iOS-Runtime-Headers/blob/ ... Je ne sais pas comment vous pourriez personnaliser la police pour un fichierNSString
.Swift 5 et 5.1 . Créez un fichier séparé et placez-y le code de personnalisation UIAlertController
Maintenant sur n'importe quelle action Afficher l'alerte
Résultat
la source
Je l'utilise.
Ajoutez une ligne (AppDelegate) et fonctionne pour tous les UIAlertController.
la source
Swift 4
Exemple de police personnalisée sur le titre. Mêmes choses pour les autres composants tels que le message ou les actions.
la source
Voici une extension pour Swift 4.1 et Xcode 9.4.1:
la source
Je viens de terminer un remplacement pour
UIAlertController
. C'est la seule façon raisonnable de procéder, je pense:Vieux
Voici ma méthode dans Swift qui regroupe beaucoup d'informations à partir des réponses ici
Cela fonctionne parfaitement dans certaines situations, et dans d'autres, c'est un échec total (les couleurs de teinte ne s'affichent pas comme prévu).
la source
Vous pouvez utiliser une bibliothèque externe telle que PMAlertController sans utiliser de solution de contournement, où vous pouvez remplacer le UIAlertController non personnalisable d'Apple par une alerte super personnalisable.
Compatible avec Xcode 8, Swift 3 et Objective-C
Fonctionnalités:
la source
actionButton.titleLabel.lineBreakMode = NSLineBreakByWordWrapping
fonctionne bien.Il y a un problème avec le réglage de la couleur de teinte sur la vue après la présentation; même si vous le faites dans le bloc de complétion de presentViewController: animated: completion :, cela provoque un effet de scintillement sur la couleur des titres des boutons. C'est bâclé, non professionnel et totalement inacceptable.
D'autres solutions présentées dépendent du fait que la hiérarchie des vues reste statique, ce qu'Apple déteste faire. Attendez-vous à ce que ces solutions échouent dans les futures versions d'iOS.
Le seul moyen sûr de résoudre ce problème et de le faire partout, consiste à ajouter une catégorie à UIAlertController et à faire basculer viewWillAppear.
L'en-tête:
La mise en oeuvre:
Ajoutez un .pch (en-tête précompilé) à votre projet et incluez la catégorie:
Assurez-vous d'enregistrer correctement votre pch dans le projet et il inclura les méthodes de catégorie dans chaque classe qui utilise UIAlertController.
Ensuite, dans la méthode didFinishLaunchingWithOptions de vos délégués d'application, importez votre catégorie et appelez
et il se propagera automatiquement à chaque instance de UIAlertController dans votre application, qu'elle soit lancée par votre code ou par quelqu'un d'autre.
Cette solution fonctionne à la fois pour iOS 8.X et iOS 9.X et n'a pas le scintillement de l'approche post-présentation du changement de teinte. Il est également totalement indépendant de la hiérarchie des vues des sous-vues de UIAlertController.
Bon piratage!
la source
Veuillez trouver ceci catégorie. Je suis capable de changer la police et la couleur de UIAlertAction et UIAlertController.
Utilisation:
la source
Dans Swift 4.1 et Xcode 10
la source
self.present(alertController, animated: true)
ouself.present(alert, animated: true)
.Solution / Hack pour iOS9
la source
Je travaille pour Urban Outfitters. Nous avons un pod open source
URBNAlert
, que nous avons utilisé dans toutes nos applications. Il est basé surUIAlertController
, mais est hautement personnalisable.La source est ici: https://github.com/urbn/URBNAlert
Ou simplement installer par le pod en plaçant
URBNAlert
dans votre PodfileVoici un exemple de code:
la source
Pour changer la couleur d'un bouton comme CANCEL en couleur rouge, vous pouvez utiliser cette propriété de style appelée UIAlertActionStyle.destructive:
la source
Pour iOS 9.0 et supérieur, utilisez ce code dans le délégué d'application
la source
la source
Un peu maladroit, mais cela fonctionne pour moi en ce moment pour définir les couleurs d'arrière-plan et de texte. Je l'ai trouvé ici .
la source
J'ai créé une méthode objective-C
Le code fonctionne parfaitement sur Xcode 8.3.1. Vous pouvez personnaliser selon les besoins.
la source
J'utilise juste ce genre de demande, apparemment et système, les détails sont légèrement différents, donc nous sommes ... OC a réalisé l'encapsulation de la fenêtre popup Alert and Sheet.
Souvent rencontrés dans le développement quotidien, il est nécessaire d'ajouter un chiffre à Alert ou de changer la couleur d'un bouton, comme la demande «simple», apporte aujourd'hui un et des composants système très similaires et peut pleinement répondre à la demande de composants d'emballage personnalisés.
Github: https://github.com/ReverseScale/RSCustomAlertView
la source