La fonctionnalité UITextView
Copier, Couper, Sélectionner, Tout sélectionner de s s'affiche par défaut lorsque j'appuie sur l'écran. Mais, dans mon projet, le UITextField
n'est en lecture seule. Je n'ai pas besoin de cette fonctionnalité. Veuillez me dire comment désactiver cette fonctionnalité.
ios
objective-c
uitextview
Aishwarya
la source
la source
Réponses:
Le moyen le plus simple de désactiver les opérations de la table de montage consiste à créer une sous-classe de
UITextView
celle qui remplace lacanPerformAction:withSender:
méthode à renvoyerNO
pour les actions que vous ne souhaitez pas autoriser:Voir également UIResponder
la source
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { return NO; }
- pour bloquer toutes les optionsSous-classe UITextView et écraser canBecomeFirstResponder:
Notez que cela ne s'applique qu'aux UITextViews non modifiables! Je ne l'ai pas testé sur des modifiables ...
la source
return NO;
sur la- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
méthode est une meilleure option.Si vous souhaitez désactiver le couper / copier / coller sur l' ensemble
UITextView
de votre application, vous pouvez utiliser une catégorie avec:Il enregistre un sous-classement ... :-)
la source
UITextView
de se comporter comme prévu lorsque, par exemple, il est modifiable et est touché. C'est beaucoup à remplacercanPerformAction:withSender:
; c'est à cela que sert le protocole.C'était la meilleure solution de travail pour moi:
depuis: https://stackoverflow.com/a/5704584/1293949
la source
La réponse @rpetrich a fonctionné pour moi. Je poste le code développé au cas où cela permettrait à quelqu'un de gagner du temps.
Dans mon cas, je ne veux aucune fenêtre contextuelle, mais je veux que UITextField puisse devenir le premier répondeur.
Malheureusement, vous obtenez toujours la fenêtre contextuelle de la loupe lorsque vous maintenez le doigt sur le champ de texte.
Swift 4
la source
Si vous n'avez pas besoin de UITextView pour faire défiler, la solution la plus simple qui n'implique pas de sous-classification consiste simplement à désactiver l'interaction de l'utilisateur pour la vue texte:
la source
Le moyen le plus simple consiste à créer une sous-classe de UITextView qui remplace le canPerformAction: withSender:
la source
Lorsque je retourne NON dans canPerformAction sur iOS 7, j'obtiens beaucoup d'erreurs comme celle-ci:
<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.
Ma solution est la suivante:
L'astuce consiste à masquer le contrôleur de menu dans le cycle suivant sur la file d'attente principale (juste après son affichage).
la source
C'est le moyen le plus simple de désactiver tout le menu Sélectionner / Copier / Coller dans un UITextView
la source
Depuis iOS 7, il existe une propriété sur UITextView:
Cela empêche une vue d'autoriser les sélections de texte. Fonctionne très bien pour moi.
la source
Si vous cherchez à remplacer le clavier par un, disons,
UIPicker
comme leinputView
(avec bien sûr une barre d'outils comme uninputAccesotyView
), alors cette solution de contournement pourrait vous aider ...textFieldShouldBeginEditing:
textField.userInteractionEnabled = NO;
UIPickerView
, réglez-le sur OUI.En faisant cela, vous pourrez appuyer sur
UITextField
et afficher les options à choisirUIPickerView
, à ceUITextField
stade, vous ne réagiriez en effet à aucun événement tactile (cela inclut le toucher et maintenir pour couper, copier et coller). Cependant, vous devez vous rappeler de le remettre sur OUI lorsque vous fermez votre,UIPickerView
mais vous ne pourrez plus y accéderUIPickerView
.Le seul moment où cela échoue est lorsque l'utilisateur commence par appuyer et maintenir le
UITextView
, alors vous verrez couper et coller à nouveau pour la première fois. C'est pourquoi vous devez toujours valider vos entrées. C'est le plus simple auquel je puisse penser. L'autre option était d'utiliser unUILabel
pour le texte en lecture seule, mais vous manquez de nombreuses fonctionnalités intéressantesUITextView
.la source
Sous-classe UITextView - swift 4.0
la source
Si vous souhaitez désactiver la fenêtre contextuelle,
UITextField
essayez cetteUITextFieldDelegate
méthode pour basculerisUserInteractionEnabled
.la source
Cela peut être fait facilement dans le storyboard (Xcode 6). Décochez simplement Modifiable et sélectionnable dans l'inspecteur d'attributs. Vous pouvez toujours faire défiler la vue texte.
la source
Cela a fonctionné pour moi. Assurez-vous que vous appelez resignFirstResponder sur le textView
la source
J'ai fourni une réponse de travail ici pour désactiver la sélection de texte + loupe, en gardant les liens clikables activés J'espère que cela aide:
UIUnselectableTextView.m
la source
Pour Swift 3, il est changé en:
la source
Vous pouvez résoudre ce problème dans votre storyboard en décochant ces cases:
Ou vous pouvez définir par programme comme ceci:
la source
Je l'ai fait. Sur mon,
UITextView
j'ai désactivé très facilement l'option couper, copier, sélectionner, etc.J'ai placé un
UIView
au même endroit où j'avais placé leUITextView
, mais dessusself.view
et j'ai ajouté unetouchDelegate
méthode comme suit:et cela a fonctionné pour moi. Je vous remercie.
la source
Rapide
en relation
la source
Si vous souhaitez ajouter une option personnalisée à votre UITextView mais désactiver les fonctions existantes, voici comment vous le faites sur Swift 3 :
Pour désactiver la fonction copier, coller, couper, créez une sous-classe et remplacez les éléments suivants:
Sur le ViewController, votre CustomTextView ajoute ce qui suit pour ajouter vos options:
la source
Cette méthode désactivera complètement le menu Sélectionner, Tout sélectionner, Coller. Si vous obtenez encore une autre action, ajoutez-la simplement à la condition if comme ci-dessous.
la source
Vous pouvez simplement créer une catégorie comme celle-ci:
UITextView + Selectable.h
UITextView + sélectionnable.m
la source
Le sous
UITextView
-classement et le remplacement- (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
sont une autre possibilité de désactiver les actions indésirables.Utilisez la classe de
gestureRecognizer
-object pour décider si l'action doit être ajoutée ou non.la source
(SWIFT) Si vous voulez juste un champ de texte de base sans aucune des options de menu ou de la loupe, créez une sous-classe de UITextField renvoyant false à gestureRecognizerShouldBegin:
Cela contournera toutes les fonctionnalités tactiles du champ de texte mais vous permettra toujours d'utiliser le clavier contextuel pour ajouter / supprimer des caractères.
Si vous utilisez un storyboard, affectez simplement la classe nouvellement créée au champ de texte ou si vous créez un champ de texte par programme:
la source
la source
Swift 3
Pour ce faire, vous devez sous-classer votre UITextView et placer cette méthode.
la source
UITextView a deux propriétés qui feront ce dont vous avez besoin: isSelectable et isEditable .
En définissant isEditable sur false, vous éviterez à l'utilisateur de modifier le texte et en définissant isSelectable sur false, vous éviterez à l'utilisateur de sélectionner du texte dans votre textView, ce qui empêchera l'affichage du menu d'action.
la source
Veuillez trouver l'exemple de code pour référence:
la source
Utilisez
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { retrun bool }
à la place detextFieldShouldBeginEditing
.Créez une nouvelle classe avec le nom StopPasteAction.swift
Ajouter la classe nouvelle classe avec votre TextField actuel
la source