Estou usando o novo UIAlertController para mostrar alertas. Eu tenho este código:
// 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];
Agora eu quero mudar o título e a fonte da mensagem, cor, tamanho e assim. Qual é a melhor maneira de fazer isso?
Edit: devo inserir o código inteiro. Criei categoria para UIView que poderia mostrar alerta certo para versão 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
fonte
fonte
DISCLAIMER:
Para quem está lendo as respostas abaixo. A Apple rejeitará seu (s) aplicativo (s). Se você tende a usar qualquer Api (s) privado (s). E nas respostas abaixo ISSO É O QUE ESTÁ ACONTECENDO ..Respostas:
Não tenho certeza se isso é contra APIs / propriedades privadas, mas usar KVC funciona para mim no ios8
Para registro, é possível alterar a fonte da ação de alerta também, usando essas APIs privadas. Novamente, isso pode fazer com que seu aplicativo seja rejeitado. Ainda não tentei enviar esse código.
Para Swift 4.2 em XCode 10 e superior, as últimas 2 linhas são agora:
fonte
attributedTitle
para título eattributedMessage
para mensagem. Não tenho certeza se é a melhor solução, mas por enquanto é bom o suficiente para mim.UIAlertController
. Como fazer o mesmo comUIAlertAction
?Você pode alterar a cor do botão aplicando uma cor de matiz a um UIAlertController.
No iOS 9, se a cor da tonalidade da janela foi definida como uma cor personalizada, você deve aplicar a cor da tonalidade logo após apresentar o alerta. Caso contrário, a cor da tonalidade será redefinida para a cor de tonalidade da janela personalizada.
fonte
Você pode alterar a cor do texto do botão usando este código:
Talvez isso ajude você.
fonte
Resultado
fonte
Uma tradução rápida da resposta @ dupuis2387. Trabalhou a sintaxe para definir a
UIAlertController
cor e fonte do título via KVC usando aattributedTitle
tecla.fonte
tintColor
noview
ou viaappearanceWhenContainedIn
, mas a tonalidade desaparece assim que você toca. Ainda procurando por respostas.self.presentViewController(alertController, animated: true, completion: nil)
podemos mudar a fonte do botão "OK"?Use
UIAppearance
protocolo. Exemplo para definir uma fonte - crie uma categoria para estenderUILabel
:E seu uso:
Testado e trabalhando com estilo
UIAlertControllerStyleActionSheet
, mas acho que funcionaráUIAlertControllerStyleAlert
também.PS Melhor verificar a disponibilidade das aulas em vez da versão iOS:
fonte
Use
UIAppearance
protocolo. Faça mais hacks comappearanceFont
para alterar a fonteUIAlertAction
.Crie uma categoria para
UILabel
UILabel + FontAppearance.h
UILabel + FontAppearance.m
Uso:
adicionar
[[UILabel appearanceWhenContainedIn:UIAlertController.class, nil] setAppearanceFont:nil];
em
AppDelegate.m
fazê-lo funcionar para todosUIAlertController
.fonte
if (self.font.pointSize == 13 && isBold) {
UIAlertAction
. Mas, pelo que posso dizer,UIAlertAction
não usa aUILabel
. Ele usa umNSString
. github.com/nst/iOS-Runtime-Headers/blob/… Não sei como você pode personalizar a fonte para umNSString
.Swift 5 e 5.1 . Crie um arquivo separado e coloque o código de personalização UIAlertController lá
Agora em qualquer ação Mostrar alerta
Resultado
fonte
Estou usando isso.
Adicione uma linha (AppDelegate) e funciona para todos os UIAlertController.
fonte
Swift 4
Exemplo de fonte personalizada no título. As mesmas coisas para outros componentes, como mensagem ou ações.
fonte
Aqui está uma extensão para Swift 4.1 e Xcode 9.4.1:
fonte
Acabei de completar uma substituição para
UIAlertController
. Esta é a única maneira sensata de ir, eu acho:Velho
Este é o meu método em Swift, que combina muitas informações das respostas aqui
Isso funciona perfeitamente em algumas situações, e em outras é uma falha total (as cores de matiz não aparecem como o esperado).
fonte
Você pode usar uma biblioteca externa como PMAlertController sem usar uma solução alternativa, onde você pode substituir o UIAlertController da Apple não personalizável por um alerta super personalizável.
Compatível com Xcode 8, Swift 3 e Objective-C
Recursos:
fonte
actionButton.titleLabel.lineBreakMode = NSLineBreakByWordWrapping
funciona bem.Há um problema com a definição da cor de matiz na exibição após a apresentação; mesmo se você fizer isso no bloco de conclusão de presentViewController: animated: completed :, isso causa um efeito de oscilação na cor dos títulos dos botões. Isso é desleixado, pouco profissional e completamente inaceitável.
Outras soluções apresentadas dependem de a hierarquia de visualização permanecer estática, algo que a Apple detesta fazer. Espere que essas soluções falhem em versões futuras do iOS.
A única maneira infalível de resolver esse problema e fazê-lo em qualquer lugar é adicionando uma categoria ao UIAlertController e fazendo o swizzling do viewWillAppear.
O cabeçalho:
A implementação:
Adicione um .pch (cabeçalho pré-compilado) ao seu projeto e inclua a categoria:
Certifique-se de registrar seu pch no projeto corretamente, e ele incluirá os métodos de categoria em cada classe que usa o UIAlertController.
Em seguida, no método didFinishLaunchingWithOptions dos delegados do seu aplicativo, importe sua categoria e chame
e ele se propagará automaticamente para cada instância do UIAlertController dentro do seu aplicativo, seja iniciado pelo seu código ou por qualquer outra pessoa.
Esta solução funciona para iOS 8.X e iOS 9.X e não apresenta a oscilação da abordagem pós-apresentação da mudança de tonalidade. Também é completamente agnóstico em relação à hierarquia de visualizações das subvisões do UIAlertController.
Feliz hacking!
fonte
Por favor encontre isto categoria. Eu sou capaz de mudar FONT e Color de UIAlertAction e UIAlertController.
Usar:
fonte
Em Swift 4.1 e Xcode 10
fonte
self.present(alertController, animated: true)
ouself.present(alert, animated: true)
.Solução / hack para iOS9
fonte
Eu trabalho para Urban Outfitters. Temos um pod de código aberto
URBNAlert
, que usamos em todos os nossos aplicativos. É baseado emUIAlertController
, mas é altamente personalizável.A fonte está aqui: https://github.com/urbn/URBNAlert
Ou simplesmente instale pelo pod, colocando
URBNAlert
em seu PodfileAqui está um código de amostra:
fonte
Para alterar a cor de um botão como CANCELAR para vermelho, você pode usar esta propriedade de estilo chamada UIAlertActionStyle.destructive:
fonte
Para iOS 9.0 e superior, use este código no delegado do aplicativo
fonte
fonte
Um pouco desajeitado, mas agora funciona para mim definir as cores do fundo e do texto. Eu encontrei aqui .
fonte
Eu criei um método objetivo-C
Código funcionando perfeitamente no Xcode 8.3.1. Você pode personalizar de acordo com a necessidade.
fonte
Eu apenas uso esse tipo de demanda, aparentemente e sistema, os detalhes são um pouco diferentes, então somos ... OC percebeu o encapsulamento da janela popup de Alerta e Folha.
Freqüentemente encontrado no desenvolvimento diário, a necessidade de adicionar uma figura para alertar ou alterar a cor de um botão, como a demanda "simples", hoje traz um sistema de componentes e altamente semelhantes e pode atender totalmente a demanda de componentes de embalagens personalizadas.
Github: https://github.com/ReverseScale/RSCustomAlertView
fonte