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 forma de hacer esto?
Editar: debería 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];
}
}
ios
objective-c
ios8
uialertview
uialertcontroller
Libor Zapletal
fuente
fuente
DISCLAIMER:
Para cualquiera que esté leyendo las siguientes respuestas. Apple rechazará su (s) aplicación (es). Si sueles usar alguna API privada. Y en las siguientes respuestas ESO ES LO QUE ESTÁ SUCEDIENDO ..Respuestas:
No estoy seguro de si esto va en contra de las API / propiedades privadas, pero el uso de KVC me funciona en ios8
Para el registro, también es posible cambiar la fuente de la acción de alerta, utilizando esas API privadas. Nuevamente, es posible que rechacen su aplicación, todavía no he intentado enviar dicho código.
Para Swift 4.2 en XCode 10 en adelante, las últimas 2 líneas son ahora:
fuente
attributedTitle
por título yattributedMessage
por mensaje. No estoy seguro de si es la mejor solución, pero por ahora es lo suficientemente buena para mí.UIAlertController
. ¿Cómo se puede hacer lo mismo conUIAlertAction
?Puede cambiar el color del botón aplicando un color de tinte a un UIAlertController.
En iOS 9, si el color del tinte de la ventana se configuró en un color personalizado, debe aplicar el color del tinte justo después de presentar la alerta. De lo contrario, el color de tinte se restablecerá al color de tinte de ventana personalizado.
fuente
Puede cambiar el color del texto del botón usando este código:
Quizás esto te ayude.
fuente
Salida
fuente
Una traducción rápida de la respuesta @ dupuis2387. Resolvió la sintaxis para establecer el
UIAlertController
color y la fuente del título a través de KVC usando laattributedTitle
tecla.fuente
tintColor
en elview
o viaappearanceWhenContainedIn
, pero el tinte desaparece tan pronto como lo toca. Sin embargo, sigo buscando respuestas.self.presentViewController(alertController, animated: true, completion: nil)
¿podemos cambiar la fuente del botón "OK"?Utilice el
UIAppearance
protocolo. Ejemplo para configurar una fuente: cree una categoría para extenderUILabel
:Y su uso:
Probado y funcionando con estilo
UIAlertControllerStyleActionSheet
, pero supongo que también funcionaráUIAlertControllerStyleAlert
.PD Mejor comprobar la disponibilidad de clases en lugar de la versión de iOS:
fuente
Utilice el
UIAppearance
protocolo. Haz más trucosappearanceFont
para cambiar la fuenteUIAlertAction
.Crea una categoría para
UILabel
UILabel + FontAppearance.h
UILabel + FontAppearance.m
Uso:
añadir
[[UILabel appearanceWhenContainedIn:UIAlertController.class, nil] setAppearanceFont:nil];
en
AppDelegate.m
hacer que funcione para todosUIAlertController
.fuente
if (self.font.pointSize == 13 && isBold) {
UIAlertAction
. Pero por lo que puedo decir,UIAlertAction
no usa unUILabel
. Utiliza unNSString
. github.com/nst/iOS-Runtime-Headers/blob/… No sé cómo se puede personalizar la fuente para un archivoNSString
.Swift 5 y 5.1 . Cree un archivo separado y coloque allí el código de personalización UIAlertController
Ahora en cualquier acción Mostrar alerta
Resultado
fuente
Lo estoy usando.
Agregue una línea (AppDelegate) y funciona para todos los UIAlertController.
fuente
Rápido 4
Ejemplo de fuente personalizada en el título. Lo mismo ocurre con otros componentes, como mensajes o acciones.
fuente
Aquí hay una extensión para Swift 4.1 y Xcode 9.4.1:
fuente
Acabo de completar un reemplazo para
UIAlertController
. Esta es la única forma sensata de hacerlo, creo:Antiguo
Aquí está mi método en Swift, que combina mucha información de las respuestas aquí
Esto funciona perfectamente en algunas situaciones y en otras es un fracaso total (los colores de tinte no se muestran como se esperaba).
fuente
Puede utilizar 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:
fuente
actionButton.titleLabel.lineBreakMode = NSLineBreakByWordWrapping
funciona bien.Existe un problema al establecer el color del tinte en la vista después de la presentación; incluso si lo hace en el bloque de finalización de presentViewController: animated: deployment :, 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 agregando una categoría a UIAlertController y ampliando viewWillAppear.
El encabezado:
La implementación:
Agregue un .pch (encabezado precompilado) a su proyecto e incluya la categoría:
Asegúrese de registrar su pch en el proyecto correctamente, e incluirá los métodos de categoría en cada clase que use UIAlertController.
Luego, en el método didFinishLaunchingWithOptions de los delegados de su aplicación, importe su categoría y llame
y se propagará automáticamente a cada instancia de UIAlertController dentro de su aplicación, ya sea que la inicie 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 subvistas de UIAlertController.
¡Feliz piratería!
fuente
Encuentre esta categoría. Puedo cambiar la FUENTE y el color de UIAlertAction y UIAlertController.
Utilizar:
fuente
En Swift 4.1 y Xcode 10
fuente
self.present(alertController, animated: true)
oself.present(alert, animated: true)
.Solución / Hack para iOS9
fuente
Trabajo para Urban Outfitters. Tenemos un pod de código abierto
URBNAlert
, que usamos en todas nuestras aplicaciones. Se basa enUIAlertController
, pero es altamente personalizable.La fuente está aquí: https://github.com/urbn/URBNAlert
O simplemente instálelo por la vaina colocando
URBNAlert
en su PodfileAquí hay un código de muestra:
fuente
Para cambiar el color de un botón como CANCELAR al color rojo, puede usar esta propiedad de estilo llamada UIAlertActionStyle.destructive:
fuente
Para iOS 9.0 y superior, use este código en el delegado de la aplicación
fuente
fuente
Un poco torpe, pero esto me funciona en este momento para establecer colores de fondo y texto. Lo encontré aquí .
fuente
He creado un método objetivo-C
El código funciona perfectamente en Xcode 8.3.1. Puede personalizar según los requisitos.
fuente
Solo uso este tipo de demanda, aparentemente y el sistema, los detalles son ligeramente diferentes, por lo que estamos ... OC se dio cuenta de la encapsulación de la ventana emergente Alert and Sheet.
A menudo se encuentran en el desarrollo diario la necesidad de agregar una figura a Alert o cambiar un botón de color, como "simple" demanda, hoy trae un sistema de componentes muy similar y puede satisfacer plenamente la demanda de componentes de embalaje personalizados.
Github: https://github.com/ReverseScale/RSCustomAlertView
fuente