A funcionalidade de UITextView
Copiar, Cortar, Selecionar, Selecionar Tudo é exibida por padrão quando pressiono a tela. Mas, no meu projeto, o UITextField
é somente leitura. Eu não preciso dessa funcionalidade. Por favor me diga como desabilitar este recurso.
ios
objective-c
uitextview
Aishwarya
fonte
fonte
Respostas:
A maneira mais fácil de desativar as operações da área de trabalho é criar uma subclasse de
UITextView
que substitui ocanPerformAction:withSender:
método para retornarNO
para ações que você não deseja permitir:Veja também UIResponder
fonte
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { return NO; }
- para bloquear todas as opçõesSubclasse UITextView e substitua canBecomeFirstResponder:
Observe que isso se aplica apenas a UITextViews não editáveis! Não testei em editáveis ...
fonte
return NO;
no- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
método é uma opção melhor.Se desejar desativar cortar / copiar / colar em todos os
UITextView
seus aplicativos, você pode usar uma categoria com:Ele salva uma subclasse ... :-)
fonte
UITextView
comporte-se conforme o esperado quando, por exemplo, é editável e recebe um toque. É muito para substituircanPerformAction:withSender:
; é para isso que serve o protocolo.Esta foi a melhor solução de trabalho para mim:
de: https://stackoverflow.com/a/5704584/1293949
fonte
A resposta @rpetrich funcionou para mim. Estou postando o código expandido, caso isso economize algum tempo.
No meu caso, não quero nenhum pop-up, mas quero que o UITextField seja capaz de se tornar o primeiro a responder.
Infelizmente, você ainda obtém o pop-up da lupa quando toca e segura o campo de texto.
Swift 4
fonte
Se você não precisa de UITextView para rolar, a solução mais simples que não envolve subclassificação é simplesmente desativar a interação do usuário para a visualização de texto:
fonte
A maneira mais fácil é criar uma subclasse de UITextView que substitui canPerformAction: withSender:
fonte
Quando eu retornar NÃO no canPerformAction no iOS 7, obtenho muitos erros como este:
<Error>: CGContextSetFillColorWithColor: invalid context 0x0. This is a serious error. This application, or a library it uses, is using an invalid context and is thereby contributing to an overall degradation of system stability and reliability. This notice is a courtesy: please fix this problem. It will become a fatal error in an upcoming update.
Minha solução é a seguinte:
O truque é ocultar o controlador de menu no próximo ciclo na fila principal (logo depois de ser exibido).
fonte
Esta é a maneira mais fácil de desativar todo o menu Selecionar / Copiar / Colar em um UITextView
fonte
Desde o iOS 7, há uma propriedade no UITextView:
Isso impede que uma visualização permita seleções de texto. Funciona muito bem para mim.
fonte
Se você está procurando substituir o teclado por um, digamos,
UIPicker
comoinputView
(com uma barra de ferramentas como uminputAccesotyView
), então esta solução alternativa pode ajudar ...textFieldShouldBeginEditing:
textField.userInteractionEnabled = NO;
UIPickerView
, defina-o como SIM.Ao fazer isso, você seria capaz de tocar em
UITextField
e mostrar as opções para escolherUIPickerView
, neste momento vocêUITextField
, de fato, não reagiria a qualquer evento de toque (isso inclui tocar e segurar para cortar, copiar e colar). No entanto, você deve se lembrar de defini-lo de volta para SIM quando estiver fechando o seu,UIPickerView
mas não será possível acessar oUIPickerView
novamente.O único momento em que falha é quando o usuário começa tocando e segurando o botão
UITextView
, então você verá cortar, copiar e colar novamente pela primeira vez. É por isso que você deve sempre validar suas entradas. É o mais fácil que consigo pensar. A outra opção era usar umUILabel
para texto somente leitura, mas você perde muitas funcionalidades doUITextView
.fonte
Subclasse UITextView - swift 4.0
fonte
Se você deseja desativar o pop-up para
UITextField
, tente esteUITextFieldDelegate
método para alternarisUserInteractionEnabled
.fonte
Isso pode ser feito facilmente no storyboard (Xcode 6). Apenas desmarque Editable e Selectable no Attributes Inspector. Você ainda pode rolar a tela de texto.
fonte
Isso funcionou para mim. Certifique-se de chamar resignFirstResponder no textView
fonte
Eu forneci uma resposta funcional aqui para desativar a seleção de texto + lupa, mantendo links clicáveis habilitados Espero que ajude:
UIUnselectableTextView.m
fonte
Para Swift 3, ele foi alterado para:
fonte
Você pode corrigir isso em seu storyboard desmarcando estas caixas:
Ou você pode definir programaticamente assim:
fonte
Eu fiz isso No meu
UITextView
, desativei a opção cortar, copiar, selecionar, etc. com muita facilidade.Coloquei um
UIView
no mesmo lugar onde havia colocado oUITextView
, mas emself.view
e adicionei umtouchDelegate
método como segue:e funcionou para mim. Obrigado.
fonte
Rápido
Relacionados
fonte
Se você deseja adicionar uma opção personalizada ao seu UITextView, mas desabilitar as funções existentes, é assim que você faz no Swift 3 :
Para desativar a funcionalidade de copiar, colar e cortar, crie uma subclasse e substitua o seguinte:
No ViewController você tem seu CustomTextView e adiciona o seguinte para adicionar suas opções:
fonte
Este método desabilitará completamente o menu Selecionar, Selecionar Tudo, Colar. Se você ainda conseguir alguma outra ação, basta adicioná-la à condição if como abaixo.
fonte
Você pode apenas criar uma categoria como esta:
UITextView + Selectable.h
UITextView + Selectable.m
fonte
Subclassificação
UITextView
e substituição- (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
é outra possibilidade de desabilitar ações indesejadas.Use a classe do
gestureRecognizer
objeto -para decidir se a ação deve ser adicionada ou não.fonte
(SWIFT) Se você quiser apenas um campo de texto básico sem nenhuma das opções de menu ou lupa, crie uma subclasse de UITextField retornando false para gestoRecognizerShouldBegin:
Isso irá ignorar toda a funcionalidade de toque no campo de texto, mas ainda permitirá que você use o teclado pop-up para adicionar / remover caracteres.
Se você estiver usando o storyboard, apenas atribua a classe recém-criada ao campo de texto ou se estiver criando um campo de texto programaticamente:
fonte
fonte
Swift 3
Para fazer isso, você precisa criar uma subclasse de seu UITextView e colocar este método.
fonte
UITextView tem duas propriedades que farão o que você precisa: isSelectable e isEditable .
Definindo isEditable como false, você evitará que o usuário edite o texto e definindo isSelectable como false, você evitará que o usuário selecione o texto dentro de seu textView, então isso impedirá que o menu de ação seja mostrado.
fonte
Encontre o código de amostra para referência:
fonte
Use
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { retrun bool }
no lugar detextFieldShouldBeginEditing
.Crie uma nova classe com o nome StopPasteAction.swift
Adicione a classe nova classe com seu TextField atual
fonte