Gostaria de mudar a cor do texto do espaço reservado que defini nos meus UITextField
controles, para torná-lo preto.
Prefiro fazer isso sem usar texto normal como espaço reservado e ter que substituir todos os métodos para imitar o comportamento de um espaço reservado.
Eu acredito que se eu substituir esse método:
- (void)drawPlaceholderInRect:(CGRect)rect
então eu deveria ser capaz de fazer isso. Mas não tenho certeza de como acessar o objeto de espaço reservado real de dentro desse método.
ios
uitextfield
Adão
fonte
fonte
attributedPlaceholder
que diz usa atributos de texto, exceto para cores.[[NSAttributedString alloc] initWithString:@"placeholder" attributes: @{NSForegroundColorAttributeName: color, NSFontAttributeName : font}];
[<UITextField 0x11561d90> valueForUndefinedKey:]: this class is not key value coding-compliant for the key _field.
Fácil e sem dor, pode ser uma alternativa fácil para alguns.
Não sugerido para produção, a Apple pode rejeitar seu envio.
fonte
_placeholderLabel
é uma propriedade privada. Esta solução está sujeita a ser rejeitada pelo uso da API privada.Você pode substituir
drawPlaceholderInRect:(CGRect)rect
como tal para renderizar manualmente o texto do espaço reservado:fonte
[self.placeholder drawInRect:rect withFont:self.font lineBreakMode:UILineBreakModeTailTruncation alignment:self.textAlignment];
é provavelmente melhor. Dessa forma, você respeitará atextAlignment
propriedade. Eu adicionei isso à minha classe SSTextField . Sinta-se livre para usar em seus projetos.Você pode alterar a cor do texto do espaço reservado para qualquer cor que desejar, usando o código abaixo.
fonte
Talvez você queira tentar dessa maneira, mas a Apple pode avisá-lo sobre o acesso ao ivar privado:
OBSERVAÇÃO
Isso não está mais funcionando no iOS 7, de acordo com Martin Alléus.
fonte
Access to UITextField's _placeholderLabel ivar is prohibited. This is an application bug
😈Isso funciona no Swift <3.0:
Testado no iOS 8.2 e iOS 8.3 beta 4.
Swift 3:
Swift 4:
Swift 4.2:
fonte
Em Swift:
No Swift 4.0:
fonte
Swift 3.0 + Storyboard
Para alterar a cor do espaço reservado no storyboard, crie uma extensão com o próximo código. (fique à vontade para atualizar esse código, se você acha que pode ser mais claro e seguro).
Versão Swift 4
Versão Swift 5
fonte
NSAttributedStringKey
.A seguir, apenas com iOS6 + (conforme indicado no comentário de Alexander W):
fonte
Eu já havia enfrentado esse problema. No meu caso, o código abaixo está correto.
Objetivo C
Para Swift 4.X
Para iOS 13 Swift Code
Você também pode usar o código abaixo para iOS 13
Espero que isso possa ajudá-lo.
fonte
viewWillAppear
ouviewDidAppear
.viewDidLoad
é muito cedo.Com isso, podemos mudar a cor do texto do espaço reservado no campo de texto no iOS
fonte
Por que você não usa apenas o
UIAppearance
método:fonte
Também no seu storyboard, sem uma única linha de código
fonte
no rápido 3.X
no rápido 5
fonte
Para iOS 6.0 +
Espero que ajude.
Nota: a Apple pode rejeitar (chances de 0,01%) seu aplicativo enquanto estamos acessando a API privada. Estou usando isso em todos os meus projetos há dois anos, mas a Apple não pediu isso.
fonte
terminating with uncaught exception of type NSException
para iOS8Para desenvolvedores do Xamarin.iOS, encontrei-o neste documento https://developer.xamarin.com/api/type/Foundation.NSAttributedString/
fonte
new NSAttributedString("placeholderstring", new CTStringAttributes() { ForegroundColor = UIColor.Blue.CGColor });
Versão rápida. Provavelmente ajudaria alguém.
fonte
Categorias FTW. Pode ser otimizado para verificar se há alteração de cor eficaz.
fonte
Para lidar com o alinhamento vertical e horizontal, bem como a cor do espaço reservado no iOS7. drawInRect e drawAtPoint não usam mais o contexto atual fillColor.
https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/CustomTextProcessing/CustomTextProcessing.html
Obj-C
fonte
iOS 6 e ofertas posteriores
attributedPlaceholder
sobreUITextField
. iOS 3.2 e ofertas posterioressetAttributes:range:
sobreNSMutableAttributedString
.Você pode fazer o seguinte:
fonte
Esta solução para o Swift 4.1
fonte
Substituir
drawPlaceholderInRect:
seria a maneira correta, mas não funciona devido a um erro na API (ou na documentação).O método nunca é chamado em um
UITextField
.Consulte também drawTextInRect em UITextField não chamado
Você pode usar a solução do digdog. Como não tenho certeza se isso passa pela revisão da Apple, escolhi uma solução diferente: sobreponha o campo de texto com meu próprio rótulo, o que imita o comportamento do espaço reservado.
Isso é um pouco confuso. O código se parece com isso (observe que estou fazendo isso dentro de uma subclasse de TextField):
fonte
Sou novo no xcode e encontrei uma maneira de contornar o mesmo efeito.
Coloquei um uilabel no lugar do marcador de lugar com o formato desejado e o ocultei
Concordo que é uma solução alternativa e não uma solução real, mas o efeito foi o mesmo obtido neste link
NOTA: Ainda funciona no iOS 7: |
fonte
Swift 5 COM CAVEAT.
A ressalva é que você DEVE inserir um não vazio
String
onde "DON'T_DELETE" esteja, mesmo que essa string esteja definida em código em outro lugar. Pode poupar cinco minutos de rastreamento de cabeça.fonte
O melhor que posso fazer pelo iOS7 e menos é:
fonte
Para aqueles que usam o Monotouch (Xamarin.iOS), aqui está a resposta de Adam, traduzida para C #:
fonte
Font
propriedade do campo de texto.Eu precisava manter o alinhamento do espaço reservado para que a resposta de Adam não fosse suficiente para mim.
Para resolver isso, usei uma pequena variação que, espero, também ajude alguns de vocês:
fonte
UILineBreakModeTailTruncation
está obsoleto a partir do iOS 6.fonte
Para definir espaço reservado para campo de texto atribuído com várias cores,
Basta especificar o texto,
Resultado :-
fonte
Outra opção que não requer subclassificação - deixe o espaço reservado em branco e coloque um rótulo no topo do botão de edição. Gerencie o rótulo da mesma maneira que gerenciaria o espaço reservado (limpando assim que o usuário inserir qualquer coisa ..)
fonte