ios - Fuente personalizada UIAlertController, tamaño, color
objective-c ios8 (23)
Estoy usando el nuevo UIAlertController para mostrar alertas. Tengo este codigo:
// 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];
Ahora quiero cambiar el título y la fuente del mensaje, el color, el tamaño, etc. ¿Cuál es la mejor manera de hacer esto?
Editar: debo insertar el código completo. Creé una categoría para UIView que podría mostrar la alerta correcta para la versión de 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];
}
}
En Xcode 8 Swift 3.0
@IBAction func touchUpInside(_ sender: UIButton) {
let alertController = UIAlertController(title: "", message: "", preferredStyle: .alert)
//to change font of title and message.
let titleFont = [NSFontAttributeName: UIFont(name: "ArialHebrew-Bold", size: 18.0)!]
let messageFont = [NSFontAttributeName: UIFont(name: "Avenir-Roman", size: 12.0)!]
let titleAttrString = NSMutableAttributedString(string: "Title Here", attributes: titleFont)
let messageAttrString = NSMutableAttributedString(string: "Message Here", attributes: messageFont)
alertController.setValue(titleAttrString, forKey: "attributedTitle")
alertController.setValue(messageAttrString, forKey: "attributedMessage")
let action1 = UIAlertAction(title: "Action 1", style: .default) { (action) in
print("/(action.title)")
}
let action2 = UIAlertAction(title: "Action 2", style: .default) { (action) in
print("/(action.title)")
}
let action3 = UIAlertAction(title: "Action 3", style: .default) { (action) in
print("/(action.title)")
}
let okAction = UIAlertAction(title: "Ok", style: .default) { (action) in
print("/(action.title)")
}
alertController.addAction(action1)
alertController.addAction(action2)
alertController.addAction(action3)
alertController.addAction(okAction)
alertController.view.tintColor = UIColor.blue
alertController.view.backgroundColor = UIColor.black
alertController.view.layer.cornerRadius = 40
present(alertController, animated: true, completion: nil)
}
Salida
En Swift 4.1 y Xcode 10
//Displaying alert with multiple actions and custom font ans size
let alert = UIAlertController(title: "", message: "", preferredStyle: .alert)
let titFont = [NSAttributedStringKey.font: UIFont(name: "ArialHebrew-Bold", size: 15.0)!]
let msgFont = [NSAttributedStringKey.font: UIFont(name: "Avenir-Roman", size: 13.0)!]
let titAttrString = NSMutableAttributedString(string: "Title Here", attributes: titFont)
let msgAttrString = NSMutableAttributedString(string: "Message Here", attributes: msgFont)
alert.setValue(titAttrString, forKey: "attributedTitle")
alert.setValue(msgAttrString, forKey: "attributedMessage")
let action1 = UIAlertAction(title: "Action 1", style: .default) { (action) in
print("/(String(describing: action.title))")
}
let action2 = UIAlertAction(title: "Action 2", style: .default) { (action) in
print("/(String(describing: action.title))")
}
let okAction = UIAlertAction(title: "Ok", style: .default) { (action) in
print("/(String(describing: action.title))")
}
alert.addAction(action1)
alert.addAction(action2)
alert.addAction(okAction)
alert.view.tintColor = UIColor.blue
alert.view.layer.cornerRadius = 40
// //If required background colour
// alert.view.backgroundColor = UIColor.white
DispatchQueue.main.async(execute: {
self.present(alert, animated: true)
})
He creado un método objetivo-C
-(void)customAlertTitle:(NSString*)title message:(NSString*)message{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:nil delegate:nil cancelButtonTitle:@"NO" otherButtonTitles:@"YES", nil];
UIView *subView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 80)];
UILabel *titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 270, 50)];
titleLabel.text = title;
titleLabel.font = [UIFont boldSystemFontOfSize:20];
titleLabel.numberOfLines = 2;
titleLabel.textColor = [UIColor redColor];
titleLabel.textAlignment = NSTextAlignmentCenter;
[subView addSubview:titleLabel];
UILabel *messageLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 30, 270, 50)];
messageLabel.text = message;
messageLabel.font = [UIFont systemFontOfSize:18];
messageLabel.numberOfLines = 2;
messageLabel.textColor = [UIColor redColor];
messageLabel.textAlignment = NSTextAlignmentCenter;
[subView addSubview:messageLabel];
[alertView setValue:subView forKey:@"accessoryView"];
[alertView show];
}
Code wokring perfectamente en Xcode 8.3.1. Se puede personalizar según requerimiento.
Para cambiar el color de un botón como CANCELAR al color rojo, puede usar esta propiedad de estilo llamada UIAlertActionStyle.destructive:
let prompt = UIAlertController.init(title: "Reset Password", message: "Enter Your E-mail :", preferredStyle: .alert)
let okAction = UIAlertAction.init(title: "Submit", style: .default) { (action) in
//your code
}
let cancelAction = UIAlertAction.init(title: "Cancel", style: UIAlertActionStyle.destructive) { (action) in
//your code
}
prompt.addTextField(configurationHandler: nil)
prompt.addAction(okAction)
prompt.addAction(cancelAction)
present(prompt, animated: true, completion: nil);
Para iOS 9.0 y superior, use este código en el delegado de la aplicación
[[UIView appearanceWhenContainedInInstancesOfClasses:@[[UIAlertController class]]] setTintColor:[UIColor redColor]];
Solo uso este tipo de demanda, aparentemente y sistema, los detalles son ligeramente diferentes, por lo que estamos ... OC se dio cuenta de la ventana emergente de encapsulación de alertas y hojas.
A menudo se encuentra en el desarrollo diario la necesidad de agregar una figura a Alert o cambiar el color de un botón, como la demanda "simple", hoy trae componentes de un sistema muy similar y puede satisfacer completamente la demanda de componentes de embalaje personalizados.
Un poco torpe, pero esto me funciona en este momento para establecer colores de fondo y texto. Lo encontré here .
UIView * firstView = alertController.view.subviews.firstObject;
UIView * nextView = firstView.subviews.firstObject;
nextView.backgroundColor = [UIColor blackColor];
Acabo de completar un reemplazo para
UIAlertController
.
This
es la única forma sensata de ir, creo:
Antiguo
Aquí está mi método en Swift que combina mucha información de las respuestas aquí
func changeAlert(alert: UIAlertController, backgroundColor: UIColor, textColor: UIColor, buttonColor: UIColor?) {
let view = alert.view.firstSubview().firstSubview()
view.backgroundColor = backgroundColor
view.layer.cornerRadius = 10.0
// set color to UILabel font
setSubviewLabelsToTextColor(textColor, view: view)
// set font to alert via KVC, otherwise it''ll get overwritten
let titleAttributed = NSMutableAttributedString(
string: alert.title!,
attributes: [NSFontAttributeName:UIFont.boldSystemFontOfSize(17)])
alert.setValue(titleAttributed, forKey: "attributedTitle")
let messageAttributed = NSMutableAttributedString(
string: alert.message!,
attributes: [NSFontAttributeName:UIFont.systemFontOfSize(13)])
alert.setValue(messageAttributed, forKey: "attributedMessage")
// set the buttons to non-blue, if we have buttons
if let buttonColor = buttonColor {
alert.view.tintColor = buttonColor
}
}
func setSubviewLabelsToTextColor(textColor: UIColor, view:UIView) {
for subview in view.subviews {
if let label = subview as? UILabel {
label.textColor = textColor
} else {
setSubviewLabelsToTextColor(textColor, view: subview)
}
}
}
Esto funciona perfectamente en algunas situaciones, y en otras es un fracaso total (los colores de tinte no se muestran como se esperaba).
Aquí hay una extensión para Swift 4.1 y Xcode 9.4.1:
extension UIAlertController{
func addColorInTitleAndMessage(color:UIColor,titleFontSize:CGFloat = 18, messageFontSize:CGFloat = 13){
let attributesTitle = [NSAttributedStringKey.foregroundColor: color, NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: titleFontSize)]
let attributesMessage = [NSAttributedStringKey.foregroundColor: color, NSAttributedStringKey.font: UIFont.systemFont(ofSize: messageFontSize)]
let attributedTitleText = NSAttributedString(string: self.title ?? "", attributes: attributesTitle)
let attributedMessageText = NSAttributedString(string: self.message ?? "", attributes: attributesMessage)
self.setValue(attributedTitleText, forKey: "attributedTitle")
self.setValue(attributedMessageText, forKey: "attributedMessage")
}}
Hay un problema con la configuración del color de tinte en la vista después de la presentación; incluso si lo hace en el bloque de finalización de presentViewController: animado: finalización :, provoca un efecto de parpadeo en el color de los títulos de los botones. Esto es descuidado, poco profesional y completamente inaceptable.
Otras soluciones presentadas dependen de que la jerarquía de vistas permanezca estática, algo que Apple detesta hacer. Espere que esas soluciones fallen en futuras versiones de iOS.
La única forma segura de resolver este problema y hacerlo en todas partes es mediante la adición de una categoría a UIAlertController y la aparición de viewWillAppear.
El encabezado:
//
// UIAlertController+iOS9TintFix.h
//
// Created by Flor, Daniel J on 11/2/15.
//
#import <UIKit/UIKit.h>
@interface UIAlertController (iOS9TintFix)
+ (void)tintFix;
- (void)swizzledViewWillAppear:(BOOL)animated;
@end
La implementación:
//
// UIAlertController+iOS9TintFix.m
//
// Created by Flor, Daniel J on 11/2/15.
//
#import "UIAlertController+iOS9TintFix.h"
#import <objc/runtime.h>
@implementation UIAlertController (iOS9TintFix)
+ (void)tintFix {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Method method = class_getInstanceMethod(self, @selector(viewWillAppear:));
Method swizzle = class_getInstanceMethod(self, @selector(swizzledViewWillAppear:));
method_exchangeImplementations(method, swizzle);});
}
- (void)swizzledViewWillAppear:(BOOL)animated {
[self swizzledViewWillAppear:animated];
for (UIView *view in self.view.subviews) {
if (view.tintColor == self.view.tintColor) {
//only do those that match the main view, so we don''t strip the red-tint from destructive buttons.
self.view.tintColor = [UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0];
[view setNeedsDisplay];
}
}
}
@end
Agregue un .pch (encabezado precompilado) a su proyecto e incluya la categoría:
#import "UIAlertController+iOS9TintFix.h"
Asegúrese de registrar su pch en el proyecto correctamente, e incluirá los métodos de categoría en cada clase que use el UIAlertController.
Luego, en su aplicación, los delegados hicieron el método FinishLaunchingWithOptions, importen su categoría y llamen
[UIAlertController tintFix];
y se propagará automáticamente a cada instancia individual de UIAlertController dentro de su aplicación, ya sea que se inicie con su código o el de cualquier otra persona.
Esta solución funciona tanto para iOS 8.X como para iOS 9.X y carece del parpadeo del enfoque posterior a la presentación del cambio de tinte. También es completamente agnóstico con respecto a la jerarquía de vistas de las sub-vistas del UIAlertController.
¡Feliz pirateo!
Lo estoy usando.
[[UIView appearanceWhenContainedIn:[UIAlertController class], nil] setTintColor:[UIColor blueColor]];
Agregue una línea (AppDelegate) y funciona para todos los UIAlertController.
No estoy seguro de si esto va en contra de las API / propiedades privadas, pero usar KVC funciona para mí en ios8
UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"Dont care what goes here, since we''re about to change below" message:@"" preferredStyle:UIAlertControllerStyleActionSheet];
NSMutableAttributedString *hogan = [[NSMutableAttributedString alloc] initWithString:@"Presenting the great... Hulk Hogan!"];
[hogan addAttribute:NSFontAttributeName
value:[UIFont systemFontOfSize:50.0]
range:NSMakeRange(24, 11)];
[alertVC setValue:hogan forKey:@"attributedTitle"];
UIAlertAction *button = [UIAlertAction actionWithTitle:@"Label text"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action){
//add code to make something happen once tapped
}];
UIImage *accessoryImage = [UIImage imageNamed:@"someImage"];
[button setValue:accessoryImage forKey:@"image"];
Para el registro, también es posible cambiar la fuente de la acción de alerta, utilizando esas API privadas. Nuevamente, puede rechazar su aplicación, todavía no he intentado enviar dicho código.
let alert = UIAlertController(title: nil, message: nil, preferredStyle: .ActionSheet)
let action = UIAlertAction(title: "Some title", style: .Default, handler: nil)
let attributedText = NSMutableAttributedString(string: "Some title")
let range = NSRange(location: 0, length: attributedText.length)
attributedText.addAttribute(NSKernAttributeName, value: 1.5, range: range)
attributedText.addAttribute(NSFontAttributeName, value: UIFont(name: "ProximaNova-Semibold", size: 20.0)!, range: range)
alert.addAction(action)
presentViewController(alert, animated: true, completion: nil)
// this has to be set after presenting the alert, otherwise the internal property __representer is nil
guard let label = action.valueForKey("__representer")?.valueForKey("label") as? UILabel else { return }
label.attributedText = attributedText
Para Swift 4.2 en XCode 10 y superior, las últimas 2 líneas son ahora:
guard let label = (action!.value(forKey: "__representer")as? NSObject)?.value(forKey: "label") as? UILabel else { return }
label.attributedText = attributedText
Por favor encuentre this categoría. Puedo cambiar FONT y Color de UIAlertAction y UIAlertController.
Utilizar:
UILabel * appearanceLabel = [UILabel appearanceWhenContainedIn:UIAlertController.class, nil];
[appearanceLabel setAppearanceFont:yourDesireFont]];
Puede cambiar el color del botón aplicando un color de tinte a un UIAlertController.
En iOS 9, si el color de tinte de la ventana se configuró en un color personalizado, debe aplicar el color de tinte justo después de presentar la alerta. De lo contrario, el color de tinte se restablecerá a su color de tinte de ventana personalizado.
// In your AppDelegate for example:
window?.tintColor = UIColor.redColor()
// Elsewhere in the App:
let alertVC = UIAlertController(title: "Title", message: "message", preferredStyle: .Alert)
alertVC.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil))
alertVC.addAction(UIAlertAction(title: "Ok", style: .Default, handler: nil))
// Works on iOS 8, but not on iOS 9
// On iOS 9 the button color will be red
alertVC.view.tintColor = UIColor.greenColor()
self.presentViewController(alert, animated: true, completion: nil)
// Necessary to apply tint on iOS 9
alertVC.view.tintColor = UIColor.greenColor()
Puede cambiar el color del texto del botón con este código:
alertC.view.tintColor = your color;
Quizás esto te ayude.
Puede usar una biblioteca externa como PMAlertController sin usar una solución alternativa, donde puede sustituir el UIAlertController no personalizable de Apple con una alerta súper personalizable.
Compatible con Xcode 8, Swift 3 y Objective-C
caracteristicas:
- [x] Vista de encabezado
- [x] Imagen de encabezado (opcional)
- [x] Título
- [x] Mensaje descriptivo
- [x] Personalizaciones: fuentes, colores, dimensiones y más
- [x] 1, 2 botones (horizontalmente) o 3+ botones (verticalmente)
- [x] Cierre cuando se presiona un botón
- [x] Soporte de campos de texto
- [x] Implementación similar a UIAlertController
- [x] Cocoapods
- [x] Cartago
- [x] Animación con UIKit Dynamics
- [x] Compatibilidad con Objective-C
- [x] Soporte Swift 2.3 y Swift 3
Solución / Hack para iOS9
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Test Error" message:@"This is a test" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
NSLog(@"Alert View Displayed");
[[[[UIApplication sharedApplication] delegate] window] setTintColor:[UIColor whiteColor]];
}];
[alertController addAction:cancelAction];
[[[[UIApplication sharedApplication] delegate] window] setTintColor:[UIColor blackColor]];
[self presentViewController:alertController animated:YES completion:^{
NSLog(@"View Controller Displayed");
}];
Swift 5. Cree un archivo separado y coloque el código de personalización UIAlertController allí
import Foundation
import UIKit
extension UIAlertController {
//Set background color of UIAlertController
func setBackgroudColor(color: UIColor) {
if let bgView = self.view.subviews.first,
let groupView = bgView.subviews.first,
let contentView = groupView.subviews.first {
contentView.backgroundColor = color
}
}
//Set title font and title color
func setTitle(font: UIFont?, color: UIColor?) {
guard let title = self.title else { return }
let attributeString = NSMutableAttributedString(string: title)//1
if let titleFont = font {
attributeString.addAttributes([NSAttributedString.Key.font : titleFont],//2
range: NSMakeRange(0, title.utf8.count))
}
if let titleColor = color {
attributeString.addAttributes([NSAttributedString.Key.foregroundColor : titleColor],//3
range: NSMakeRange(0, title.utf8.count))
}
self.setValue(attributeString, forKey: "attributedTitle")//4
}
//Set message font and message color
func setMessage(font: UIFont?, color: UIColor?) {
guard let title = self.message else {
return
}
let attributedString = NSMutableAttributedString(string: title)
if let titleFont = font {
attributedString.addAttributes([NSAttributedString.Key.font : titleFont], range: NSMakeRange(0, title.utf8.count))
}
if let titleColor = color {
attributedString.addAttributes([NSAttributedString.Key.foregroundColor : titleColor], range: NSMakeRange(0, title.utf8.count))
}
self.setValue(attributedString, forKey: "attributedMessage")//4
}
//Set tint color of UIAlertController
func setTint(color: UIColor) {
self.view.tintColor = color
}
}
Ahora en cualquier acción Mostrar alerta
func tapShowAlert(sender: UIButton) {
let alertController = UIAlertController(title: "Alert!!", message: "This is custom alert message", preferredStyle: .alert)
// Change font and color of title
alertController.setTitle(font: UIFont.boldSystemFont(ofSize: 26), color: UIColor.yellow)
// Change font and color of message
alertController.setMessage(font: UIFont(name: "AvenirNextCondensed-HeavyItalic", size: 18), color: UIColor.red)
// Change background color of UIAlertController
alertController.setBackgroudColor(color: UIColor.black)
let actnOk = UIAlertAction(title: "Ok", style: .default, handler: nil)
let actnCancel = UIAlertAction(title: "Cancel", style: .default, handler: nil)
alertController.addAction(actnOk)
alertController.addAction(actnCancel)
self.present(alertController, animated: true, completion: nil)
}
Resultado
Una traducción rápida de la respuesta @ dupuis2387.
UIAlertController
la sintaxis para establecer el color y la fuente del título
UIAlertController
través de KVC usando la tecla
attributedTitle
Título.
let message = "Some message goes here."
let alertController = UIAlertController(
title: "", // This gets overridden below.
message: message,
preferredStyle: .Alert
)
let okAction = UIAlertAction(title: "OK", style: .Cancel) { _ -> Void in
}
alertController.addAction(okAction)
let fontAwesomeHeart = "/u{f004}"
let fontAwesomeFont = UIFont(name: "FontAwesome", size: 17)!
let customTitle:NSString = "I /(fontAwesomeHeart) Swift" // Use NSString, which lets you call rangeOfString()
let systemBoldAttributes:[String : AnyObject] = [
// setting the attributed title wipes out the default bold font,
// so we need to reconstruct it.
NSFontAttributeName : UIFont.boldSystemFontOfSize(17)
]
let attributedString = NSMutableAttributedString(string: customTitle as String, attributes:systemBoldAttributes)
let fontAwesomeAttributes = [
NSFontAttributeName: fontAwesomeFont,
NSForegroundColorAttributeName : UIColor.redColor()
]
let matchRange = customTitle.rangeOfString(fontAwesomeHeart)
attributedString.addAttributes(fontAwesomeAttributes, range: matchRange)
alertController.setValue(attributedString, forKey: "attributedTitle")
self.presentViewController(alertController, animated: true, completion: nil)
Use el protocolo
UIAppearance
.
Ejemplo para configurar una fuente: cree una categoría para extender
UILabel
:
@interface UILabel (FontAppearance)
@property (nonatomic, copy) UIFont * appearanceFont UI_APPEARANCE_SELECTOR;
@end
@implementation UILabel (FontAppearance)
-(void)setAppearanceFont:(UIFont *)font {
if (font)
[self setFont:font];
}
-(UIFont *)appearanceFont {
return self.font;
}
@end
Y su uso:
UILabel * appearanceLabel = [UILabel appearanceWhenContainedIn:UIAlertController.class, nil];
[appearanceLabel setAppearanceFont:[UIFont boldSystemFontOfSize:10]]; //for example
Probado y trabajando con el estilo
UIAlertControllerStyleActionSheet
, pero supongo que también funcionará con
UIAlertControllerStyleAlert
.
PD: Verifique la disponibilidad de clase en lugar de la versión de iOS:
if ([UIAlertController class]) {
// UIAlertController code (iOS 8)
} else {
// UIAlertView code (pre iOS 8)
}
Use el protocolo
UIAppearance
.
Haz más hacks con
appearanceFont
para cambiar la fuente de
UIAlertAction
.
Crear una categoría para
UILabel
UILabel + FontAppearance.h
@interface UILabel (FontAppearance)
@property (nonatomic, copy) UIFont * appearanceFont UI_APPEARANCE_SELECTOR;
@end
UILabel + FontAppearance.m
@implementation UILabel (FontAppearance)
- (void)setAppearanceFont:(UIFont *)font
{
if (self.tag == 1001) {
return;
}
BOOL isBold = (self.font.fontDescriptor.symbolicTraits & UIFontDescriptorTraitBold);
const CGFloat* colors = CGColorGetComponents(self.textColor.CGColor);
if (self.font.pointSize == 14) {
// set font for UIAlertController title
self.font = [UIFont systemFontOfSize:11];
} else if (self.font.pointSize == 13) {
// set font for UIAlertController message
self.font = [UIFont systemFontOfSize:11];
} else if (isBold) {
// set font for UIAlertAction with UIAlertActionStyleCancel
self.font = [UIFont systemFontOfSize:12];
} else if ((*colors) == 1) {
// set font for UIAlertAction with UIAlertActionStyleDestructive
self.font = [UIFont systemFontOfSize:13];
} else {
// set font for UIAlertAction with UIAlertActionStyleDefault
self.font = [UIFont systemFontOfSize:14];
}
self.tag = 1001;
}
- (UIFont *)appearanceFont
{
return self.font;
}
@end
Uso:
añadir
[[UILabel appearanceWhenContainedIn:UIAlertController.class, nil] setAppearanceFont:nil];
en
AppDelegate.m
para que funcione para todos los
UIAlertController
.
Yo trabajo para Urban Outfitters.
Tenemos un pod de código abierto,
URBNAlert
, que utilizamos en todas nuestras aplicaciones.
Está basado en
UIAlertController
, pero es altamente personalizable.
La fuente está aquí: https://github.com/urbn/URBNAlert
O simplemente instale por el pod colocando
URBNAlert
en su Podfile
Aquí hay un código de muestra:
URBNAlertViewController *uac = [[URBNAlertViewController alloc] initWithTitle:@"The Title of my message can be up to 2 lines long. It wraps and centers." message:@"And the message that is a bunch of text. And the message that is a bunch of text. And the message that is a bunch of text."];
// You can customize style elements per alert as well. These will override the global style just for this alert.
uac.alertStyler.blurTintColor = [[UIColor orangeColor] colorWithAlphaComponent:0.4];
uac.alertStyler.backgroundColor = [UIColor orangeColor];
uac.alertStyler.textFieldEdgeInsets = UIEdgeInsetsMake(0.0, 15.0, 0.0, 15.0);
uac.alertStyler.titleColor = [UIColor purpleColor];
uac.alertStyler.titleFont = [UIFont fontWithName:@"Chalkduster" size:30];
uac.alertStyler.messageColor = [UIColor blackColor];
uac.alertStyler.alertMinWidth = @150;
uac.alertStyler.alertMaxWidth = @200;
// many more styling options available
[uac addAction:[URBNAlertAction actionWithTitle:@"Ok" actionType:URBNAlertActionTypeNormal actionCompleted:^(URBNAlertAction *action) {
// Do something
}]];
[uac addAction:[URBNAlertAction actionWithTitle:@"Cancel" actionType:URBNAlertActionTypeCancel actionCompleted:^(URBNAlertAction *action) {
// Do something
}]];
[uac show];
Swift 4
Ejemplo de fuente personalizada en el título. Lo mismo para otros componentes, como mensajes o acciones.
let titleAttributed = NSMutableAttributedString(
string: Constant.Strings.cancelAbsence,
attributes: [NSAttributedStringKey.font:UIFont(name:"FONT_NAME",size: FONT_SIZE)]
)
let alertController = UIAlertController(
title: "",
message: "",
preferredStyle: UIAlertControllerStyle.YOUR_STYLE
)
alertController.setValue(titleAttributed, forKey : "attributedTitle")
present(alertController, animated: true, completion: nil)