Eu queria usar um plano de fundo personalizado para o meu UITextFields
. Isso funciona bem, exceto pelo fato de que eu tenho que usar UITextBorderStyleNone
para torná-la bonita. Isso força o texto a ficar à esquerda sem nenhum preenchimento.
Posso definir um preenchimento manualmente para que fique semelhante a, UITextBorderStyleRoundedRect
exceto pelo uso da minha imagem de plano de fundo personalizada?
ios
uitextfield
padding
Sebastian Wramba
fonte
fonte
*paddingView
com vários campos de texto?Eu criei essa implementação de categoria e a adicionei ao topo do
.m
arquivo.Com base no link fornecido pela Piotr Blasiak. Pareceu mais simples criar uma subclasse totalmente nova e mais simples adicionar o adicional
UIView
. Ainda assim, parece que falta algo para não poder controlar o preenchimento dentro de um campo de texto.Solução Swift 4:
fonte
Uma versão Swift 3 para Xcode> 6, onde você pode editar o valor inserido no Interface Builder / Storyboard.
fonte
override func placeholderRectForBounds(bounds: CGRect) -> CGRect { return CGRectInset(bounds, inset, inset) }
@IBDesignable
e@IBInspectable
fazer, ou seja, este post na nshipsterreturn super.textRectForBounds(CGRectInset(bounds, inset, inset))
ele manipulará o deslocamento das visualizações de acessórios corretamente.Editar: Ainda funciona no iOS 11.3.1
No iOS 6
myTextField.leftView = paddingView;
está causando problemaIsso resolve o problema
Para o campo de texto alinhado à direita, use
CATransform3DMakeTranslation(-5, 0, 0)
como mencionado pelo codificador latenit nos comentáriosfonte
Uma boa abordagem para adicionar preenchimento ao UITextField é subclassificar e adicionar uma propriedade edgeInsets. Você define o edgeInsets e o UITextField será desenhado de acordo. Isso também funcionará corretamente com um conjunto leftView ou rightView personalizado.
OSTextField.h
OSTextField.m
fonte
Apenas subclasse UITextField assim:
Isso adiciona preenchimento horizontal de 10 pontos de cada lado.
fonte
Código do objetivo C
MyTextField.h
MyTextField.m
fonte
Defina sua classe de campo de texto como PaddingTextField e personalize seu preenchimento conforme desejar
Aproveite
fonte
Com base na resposta da Evil Trout, você pode criar uma categoria para facilitar o uso em vários aplicativos.
Arquivo de cabeçalho:
Arquivo de implementação:
Exemplo de uso
Espero que ajude vocês
Felicidades
fonte
Versão rápida:
Para que você possa atribuir valor no IB
fonte
IBInspectable
permite que você aplique o código do setter em tempo de execução; basta inserir seu númeroInterface Builder
e ele funcionará.Clear Button
. O botão Limpar não ficará visível se você aplicar esta solução.Você não pode definir o preenchimento. Em vez disso, tenha um
UIView
que tenha sua imagem de plano de fundo e seuUITextField
interior. Defina aUITextField
largura comoUIViewWidth-(paddingSize x 2)
e a altura da mesma forma e, em seguida, defina-a no pontopaddingSize,paddingSize
.fonte
Apenas subclasse UITextField assim ( versão Swift ):
Isso adiciona preenchimento horizontal de 25,0 pontos de cada lado.
fonte
Eu baseei-me na solução do Nate, mas então achei que isso causa problemas quando você usa as propriedades leftView / rightView, por isso é melhor ajustar a implementação do super, porque ele levará em consideração a visão esquerda / direita.
fonte
Versão atualizada para o Swift 3:
fonte
Definir preenchimento para UITextField com UITextBorderStyleNone: Swift
Com base na resposta mais votada de @Evil Trout, criei um método personalizado na minha classe ViewController, como mostrado abaixo:
Agora eu posso chamar esse método dentro (método viewDidLoad) e enviar qualquer um dos meus TextFields para esse método, adicionar preenchimento para a direita e esquerda e fornecer cores de texto e plano de fundo escrevendo apenas uma linha de código, da seguinte maneira:
Isso funcionou perfeitamente no iOS 7! Sei que adicionar muitas visualizações pode tornar essa classe um pouco mais pesada para ser carregada. Mas, quando preocupado com a dificuldade em outras soluções, me vi mais inclinado a esse método e mais flexível ao usar esse método. ;)
Obrigado pelo hack "Evil Trout"! (arco)
Eu pensei em atualizar o snippet de código desta resposta com Swift:
Como o Swift nos permite escrever extensões para as classes existentes, vamos escrever dessa maneira.
Uso:
Espero que isso seja útil para alguém lá fora!
Felicidades!
fonte
Veja como fazer isso no SWIFT
Recurso
fonte
Versão Swift 2.0:
fonte
^ Essas sugestões são ótimas para quem está criando programaticamente uma interface.
Mas existem duas maneiras preguiçosas para aqueles que usam o construtor de interface do Xcode:
mais fácil: coloque um UIImageView atrás de um campo de texto
mais fácil: altere o estilo da borda para o quadrado preto simples (opção segundo da esquerda) e adicione sua imagem como imagem de fundo. A imagem tem precedência sobre o quadrado, então você ainda obtém o preenchimento necessário para um fundo de imagem normal, sem que o quadrado seja realmente desenhado.
EDIT: você também pode usar a esfera preta (terceira opção da esquerda ao selecionar o UITextBox no IB), ela não funciona com o estilo "esfera gráfica" da extrema direita.
fonte
Se alguém está procurando por
Swift 4.0
versão, abaixoextension
está o trabalho. Tem ambosLeft
eRight
preenchimento paraUITextField
. Na verdade, éIBInspectable
para configuração de storyboard. Você pode definir o valor diretamente no Interface Builder / Storyboard. Este é um código testado na versão Swift 4.0 e no Xcode 9.0Lembre-se de que, se você deseja ativar
Clear Button
o mesmoUITextField
, mantenha o preenchimento direito em branco.fonte
A melhor maneira de fazer isso é simplesmente criar uma classe usando a subclasse de UITextField e no arquivo .m
fazendo isso, vá para o storyboard ou xib, clique no inspetor de identidade e substitua UITextfield pelo seu próprio "CustomTextField" na opção de classe.
Nota: Se você simplesmente fornecer preenchimento com layout automático para o campo de texto, seu aplicativo não será executado e exibirá apenas a tela em branco.
fonte
Versão Swift 3:
fonte
A resposta de Nate Flink é a minha favorita, mas não se esqueça das vistas direita / esquerda. Por exemplo, para
UITextField
subclasse:Acima do código, defina o preenchimento correto para
rightView
ofUITextField
.fonte
Solução Swift 3
fonte
Aqui está um código Swift para dar preenchimento no UITextfield
e ligue usando
fonte
você pode usar a categoria defina o preenchimento para esquerda e direita
UITextField + Padding.h
UITextField + Padding.m
você pode definir o preenchimento como este self.phoneNumTF.paddingValue = 10.f; ou self.phoneNumTF.leftPadding = 10.f;
fonte
A resposta da truta @Evil é ótima. Eu tenho usado essa abordagem já há algum tempo. A única coisa que falta é "lidar com vários campos de texto". Tentei outras abordagens, mas parece não funcionar.
Subclassificar o UITextField apenas para adicionar um preenchimento não fazia sentido para mim. Então, eu iterava sobre todos os UITextFields para adicionar o preenchimento.
fonte
textfieldarray
não está definido no segundoif
bloco, usei esse trecho (obrigado!) Com êxito após substituir o conteúdo do segundoif
porfor(id subSubView in [view subviews]){[self addPaddingToAllTextFields:subSubView];}
A solução de Brody funcionou perfeita para mim. Eu tive que adicionar vistas laterais em um campo de texto e adicionar preenchimento adicional. Portanto, implementando a propriedade UIEdgeInsets customizada em uma subclasse UITextField, consegui realizar a tarefa. Vou usar essa nova subclasse em todos os meus projetos.
fonte
A melhor solução que encontrei até agora é uma categoria. É assim que eu adiciono um preenchimento de 5 pontos à esquerda e à direita:
Os # pragma's são apenas para remover os avisos irritantes
fonte
adicionará borda, que funcionou como preenchimento para mim.
fonte
Outra consideração é que, se você tiver mais de um
UITextField
onde você está adicionando preenchimento, é criar um separadoUIView
para cada campo de texto - porque eles não podem ser compartilhados.fonte