Como posso definir a quantidade máxima de caracteres em um UITextField
no iPhone SDK quando carrego um UIView
?
ios
objective-c
cocoa-touch
uitextfield
Domness
fonte
fonte
Respostas:
Embora a
UITextField
classe não tenha propriedade de tamanho máximo, é relativamente simples obter essa funcionalidade, definindo os campos de textodelegate
e implementando o seguinte método delegado:Objetivo-C
Rápido
Antes de o campo de texto mudar, o UITextField pergunta ao delegado se o texto especificado deve ser alterado. O campo de texto não mudou neste momento; portanto, pegamos o comprimento atual e o comprimento da string que estamos inserindo (colando o texto copiado ou digitando um único caractere usando o teclado), menos o comprimento do intervalo. Se esse valor for muito longo (mais de 25 caracteres neste exemplo), retorne
NO
para proibir a alteração.Ao digitar um único caractere no final de um campo de texto,
range.location
será o comprimento do campo atual erange.length
será 0 porque não estamos substituindo / excluindo nada. Inserir no meio de um campo de texto significa apenas um diferenterange.location
, e colar vários caracteres significa questring
possui mais de um caractere.A exclusão de caracteres únicos ou o corte de vários caracteres é especificada por a
range
com um comprimento diferente de zero e uma sequência vazia. A substituição é apenas uma exclusão de intervalo com uma sequência não vazia.Uma observação sobre o erro "desfazer"
Como é mencionado nos comentários, há um erro
UITextField
que pode levar a uma falha.Se você colar no campo, mas a pasta for impedida pela implementação da validação, a operação de colar ainda será registrada no buffer de desfazer do aplicativo. Se você desfazer uma ação (agitando o dispositivo e confirmando um Desfazer), a
UITextField
tentativa tentará substituir a cadeia que ela acha que colou nela mesma com uma cadeia vazia. Isso irá travar porque nunca realmente colou a string nela mesma. Ele tentará substituir uma parte da string que não existe.Felizmente, você pode proteger-se
UITextField
de se matar assim. Você só precisa garantir que a gama que propõe a substituição faz existir dentro de sua seqüência atual. É isso que a verificação de sanidade inicial acima faz.Swift 3.0 com copiar e colar funcionando bem.
Espero que seja útil para você.
fonte
return newLength <= 25;
UITextField
no iPad iOS 8.1. (+1 para comentar). O autor adicionaria algo sobre isso, pois é a resposta mais votada? Fico feliz em fazer uma edição, mas as minhas parecem ser rejeitadas regularmente! :-)Swift 4
Edição: problema de vazamento de memória corrigido.
fonte
Obrigado agosto! ( Post )
Este é o código que eu acabei com o qual funciona:
fonte
return textField.text.length < MAX_LENGTH || range.length != 0;
Para concluir a resposta de agosto , uma possível implementação da função proposta (consulte o representante do UITextField ).
Eu não testei o código de domínio, mas o meu não fica preso se o usuário atingir o limite e é compatível com uma nova string que substitui uma menor ou igual.
fonte
Você não pode fazer isso diretamente -
UITextField
não tem atributo maxLength , mas pode definir oUITextField's
delegado e usar:fonte
Muitas vezes você tem vários campos de entrada com um comprimento diferente.
fonte
A melhor maneira seria configurar uma notificação sobre a alteração do texto. No seu
-awakeFromNib
método de controle de exibição, você deseja:Em seguida, na mesma classe, adicione:
Em seguida, conecte a tomada
myTextField
à suaUITextField
e ela não permitirá que você adicione mais caracteres depois de atingir o limite. Certifique-se de adicionar isso ao seu método de desalocação:fonte
Eu criei esta subclasse UITextFieldLimit:
Pegue o
UITextFieldLimit.h
eUITextFieldLimit.m
deste repositório do GitHub:https://github.com/JonathanGurebo/UITextFieldLimit
e comece a testar!
Marque o UITextField criado pelo storyboard e vincule-o à minha subclasse usando o Identity Inspector:
Em seguida, você pode vinculá-lo a um IBOutlet e definir o limite (o padrão é 10).
Seu arquivo ViewController.h deve conter: (se você não quiser modificar a configuração, como o limite)
Seu arquivo ViewController.m deve
@synthesize textFieldLimit
.Defina o limite de comprimento do texto no seu arquivo ViewController.m:
Espero que a classe ajude você. Boa sorte!
fonte
Isso deve ser suficiente para resolver o problema (substitua 4 pelo limite que você deseja). Apenas certifique-se de adicionar delegado no IB.
fonte
Use a extensão abaixo para definir o comprimento máximo de caracteres de a
UITextField
eUITextView
.Swift 4.0
UITextView
Você pode definir o limite abaixo.
fonte
Eu simulo a substituição real da string que está prestes a calcular o tamanho da string futura:
fonte
Versão Swift 3 // ***** Isso NÃO funcionará com o Swift 2.x! ***** //
Primeiro, crie um novo arquivo Swift: TextFieldMaxLength.swift e adicione o código abaixo:
e, no Storyboard, você verá um novo campo (Comprimento máximo) ao selecionar qualquer Campo de texto
se você ainda tiver mais perguntas, consulte este link: http://www.globalnerdy.com/2016/05/18/ios-programming-trick-how-to-use-xcode-to-set-a-text-fields -maximum-length-visual-studio-style /
fonte
Usando o construtor Interface, você pode vincular e obter o evento para "Edição alterada" em qualquer uma das suas funções. Agora você pode colocar o cheque pelo comprimento
fonte
O código a seguir é semelhante à resposta do sickp, mas lida com operações de copiar e colar corretamente. Se você tentar colar um texto maior que o limite, o código a seguir truncará o texto para que ele se ajuste ao limite, em vez de recusar completamente a operação de colar.
fonte
Existe uma solução genérica para definir o comprimento máximo no Swift. Por IBInspectable, você pode adicionar um novo atributo no Xcode Attribute Inspector.
fonte
Para fazê-lo funcionar com recortar e colar cordas de qualquer comprimento, sugiro alterar a função para algo como:
fonte
Swift 4
fonte
guard
?Swift 2.0 +
Antes de tudo, crie uma classe para esse processo. Vamos chamá-lo de StringValidator.swift.
Em seguida, basta colar o seguinte código dentro dele.
Agora salve a turma .....
Uso..
Agora vá para a classe viewController.swift e faça as saídas do seu campo de texto como ..
Agora vá para o método shouldChangeCharactersInRange do campo de texto e use como o seguinte.
Não se esqueça de definir o protocolo / métodos de delegação de campos de texto.
Deixe-me explicar sobre isso ... Estou usando o processo simples de extensão de string que escrevi dentro de outra classe. Agora, estou apenas chamando esses métodos de extensão de outra classe em que preciso deles, adicionando cheque e valor máximo.
Recursos...
Tipos ...
containsOnlyCharactersIn // Aceita apenas caracteres.
containsCharactersIn // Aceita combinação de caracteres
doesNotContainsCharactersIn // Não aceita caracteres
Espero que isso tenha ajudado .... Obrigado ..
fonte
swift 3.0
Este código está funcionando bem quando você cola a string mais do que os limites de caracteres.
Obrigado por seus votos. :)
fonte
Dou uma resposta complementar com base no @Frouo. Eu acho que a resposta dele é a maneira mais bonita. Porque é um controle comum que podemos reutilizar.
fonte
Esta é a maneira correta de lidar com o comprimento máximo no UITextField, permite que a tecla de retorno saia da renúncia do campo de texto como primeiro respondedor e permite que o usuário volte ao espaço quando atingir o limite
fonte
E essa abordagem simples. Está funcionando bem para mim.
Então:
fonte
Outras respostas não tratam do caso em que o usuário pode colar uma cadeia longa da área de transferência. Se eu colar uma string longa, ela deve ser truncada, mas mostrada. Use isso em seu delegado:
fonte
Reduzi a 1 linha de código :)
Defina o delegado da sua exibição de texto como "self" e adicione o
<UITextViewDelegate>
.he o seguinte código no seu .m .... você pode ajustar o número "7" para o que você deseja que seu número MÁXIMO de caracteres seja.Esse código é responsável pela digitação de novos caracteres, exclusão de caracteres, seleção de caracteres e digitação ou exclusão, seleção de caracteres e recorte, colagem em geral e seleção de caracteres e colagem.
Feito!
Como alternativa, outra maneira legal de escrever esse código com operações de bits seria
fonte
Abri de código aberto uma subclasse UITextField, STATextField , que oferece essa funcionalidade (e muito mais) com sua
maxCharacterLength
propriedade.fonte
agora quantos caracteres você quer apenas dar valores
fonte
Use este código aqui RESTRICTED_LENGTH é o comprimento que você deseja restringir para o campo de texto.
fonte
Eu fiz isso no Swift por um limite de 8 caracteres ao usar um teclado numérico.
Eu tive que testar a string! = "" Para permitir que o botão excluir funcionasse no teclado numérico, caso contrário, não permitiria excluir caracteres no campo de texto depois que atingisse o valor máx.
fonte
Para o Xamarin:
fonte
Eu implementei uma extensão UITextField para adicionar uma propriedade maxLength a ela.
É baseado no Xcode 6 IBInspectables, para que você possa definir o limite maxLength no construtor Interface.
Aqui está a implementação:
fonte