Estou fazendo um UITextField
que tem um UIPickerView
as inputView
. Tudo bem, exceto que eu posso editar copiando, colando, recortando e selecionando o texto, e eu não quero isso. Apenas o Seletor deve modificar o campo de texto.
Aprendi que posso desativar a edição configurando setEnabled
ou setUserInteractionEnabled
para NO
. Ok, mas o TextField para de responder ao toque e o seletor não aparece.
O que posso fazer para o conseguir?
ios
uitextfield
uipickerview
Luiz de prá
fonte
fonte
Traduza a resposta de Nick para rápida:
P / S: Retorno falso => os campos de texto não podem inserir, editar pelo teclado. Ele apenas pode definir o texto por code.EX: textField.text = "My String Here"
fonte
Isso seria o mais simples de tudo:
em viewDidLoad: (defina o delegado apenas para campos de texto que não devem ser editáveis.
e insira esta função de delegado:
É isso aí!
fonte
UIPickerView
comportamento desse método delegado, ele funcionará bem.Em swift 3+:
fonte
Seria mais elegante criar uma subclasse personalizada de
UITextField
que retornaNO
para todas as chamadas paracanPerformAction:withSender:
(ou pelo menos ondeaction
está@selector(cut)
ou@selector(paste)
), conforme descrito aqui .Além disso, eu também implementaria - (BOOL) textField: (UITextField *) textField shouldChangeCharactersInRange: (NSRange) range replacementString: (NSString *) string de acordo com a sugestão de Nick para desativar a entrada de texto em teclados Bluetooth.
fonte
canPerformAction
e da subclasseshouldChangeCharactersInRange
nunca são chamados.Simplesmente coloque um UIButton exatamente sobre todo o UITextField sem rótulo-texto que o torna "invisível". Este botão pode receber e delegar toques ao invés do Textfield e o conteúdo do TextField ainda estará visível.
fonte
Em Swift:
fonte
Usei a solução fornecida pelo MrMage. A única coisa que eu acrescentaria é que você deve renunciar ao UITextView como primeiro a responder, caso contrário, você ficará preso com o texto selecionado.
Este é meu código rápido:
fonte
Para obter uma alternativa que lida com UIPickerView e Action Sheets, confira ActionSheetPicker
https://github.com/TimCinel/ActionSheetPicker
São cocoapods habilitados. Ele lida com todos os botões de cancelar e concluir na Folha de Ação. Os exemplos dentro do projeto de amostra são ótimos. Eu escolhi o ActionSheetStringPicker, que lida facilmente apenas com opções baseadas em String, mas a API pode lidar com quase tudo que eu posso pensar.
Eu originalmente comecei uma solução muito parecida com a resposta marcada, mas tropecei neste projeto e levei cerca de 20 minutos para integrar as coisas ao meu aplicativo para uso, incluindo o uso de cocopods: ActionSheetPicker (~> 0.0)
Espero que isto ajude.
Baixe o projeto git e observe as seguintes classes:
Aqui está aproximadamente a maior parte do código que adicionei, mais as importações * .h.
fonte
Para evitar a edição de UITextField ao usar UIPickerView para selecionar valores (em Swift):
fonte
Esta solução alternativa funciona. Coloque um UIView transparente acima do campo de texto e implemente o seguinte código:
fonte
Faça sua inputView ser apresentada por um campo de texto oculto que também altera o texto do apresentado e desabilitado.
fonte
Eu usei :
e está funcionando bem
fonte
Isso funcionou para mim.
[textview setEditable:NO];
As respostas acima complicam a situação.fonte