Je fais un UITextField
qui a un UIPickerView
as inputView
. Tout va bien, sauf que je peux éditer par copier, coller, couper et sélectionner du texte, et je ne le veux pas. Seul le sélecteur doit modifier le champ de texte.
J'ai appris que je peux désactiver l'édition en réglant setEnabled
ou setUserInteractionEnabled
en NO
. Ok, mais le TextField cesse de répondre au toucher et le sélecteur ne s'affiche pas.
Que puis-je faire pour y parvenir?
ios
uitextfield
uipickerview
Luiz de Prá
la source
la source
Traduisez la réponse de Nick en rapide:
P / S: Retourne false => les champs de texte ne peuvent pas être saisis, éditez au clavier Il peut juste définir le texte par code.EX: textField.text = "Ma chaîne ici"
la source
Ce serait le plus simple de tous:
in viewDidLoad: (définissez le délégué uniquement pour les champs de texte qui ne doivent pas être modifiables.
et insérez cette fonction déléguée:
C'est tout!
la source
UIPickerView
comportement à partir de cette méthode déléguée, cela fonctionne bien.Dans Swift 3+:
la source
Il serait plus élégant de créer une sous-classe personnalisée de
UITextField
ce retourNO
pour tous les appels àcanPerformAction:withSender:
(ou au moins oùaction
est@selector(cut)
ou@selector(paste)
), comme décrit ici .De plus, j'implémenterais également - (BOOL) textField: (UITextField *) textField shouldChangeCharactersInRange: (NSRange) range replacementString: (NSString *) string selon la suggestion de Nick afin de désactiver la saisie de texte à partir des claviers Bluetooth.
la source
canPerformAction
et lesshouldChangeCharactersInRange
méthodes ne sont jamais appelées.Placez simplement un UIButton exactement sur tout le UITextField sans Label-text, ce qui le rend "invisible". Ce bouton peut recevoir et déléguer des touches à la place du Textfield et le contenu du TextField est toujours visible.
la source
Dans Swift:
la source
J'ai utilisé la solution fournie par MrMage. La seule chose que j'ajouterais est que vous devriez démissionner de l'UITextView en tant que premier répondeur, sinon vous êtes coincé avec le texte sélectionné.
Voici mon code SWIFT:
la source
Pour une alternative qui gère l'UIPickerView et les feuilles d'action, consultez ActionSheetPicker
https://github.com/TimCinel/ActionSheetPicker
Ce sont les cocoapodes activés. Il gère tous les boutons d'annulation et de fin de la feuille d'action. Les exemples dans l'exemple de projet sont excellents. Je choisis ActionSheetStringPicker, qui gère facilement uniquement les options basées sur des chaînes, mais l'API peut gérer presque tout ce que je peux penser.
À l'origine, j'ai lancé une solution similaire à la réponse cochée, mais je suis tombé sur ce projet et il m'a fallu environ 20 minutes pour intégrer les choses dans mon application pour une utilisation, y compris l'utilisation de cocopods: ActionSheetPicker (~> 0.0)
J'espère que cela t'aides.
Téléchargez le projet git et regardez les classes suivantes:
Voici à peu près la plupart du code que j'ai ajouté, plus les importations * .h.
la source
Pour empêcher la modification de UITextField lors de l'utilisation de UIPickerView pour sélectionner des valeurs (dans Swift):
la source
Cette solution de contournement fonctionne. Placez un UIView transparent au-dessus du champ de texte et implémentez le code suivant:
la source
Faites que votre inputView soit présenté par un champ de texte caché qui modifie également le texte de celui présenté et désactivé.
la source
Je ne sais pas à quel point c'est piraté, mais la seule chose qui a fait l'affaire dans mon cas a été d'ajouter une action cible et d'appeler endEditing. Étant donné que mon sélecteur contrôle ma valeur UITextField.text, je pourrais ignorer le clavier dès que l'utilisateur clique sur le champ. Voici un code:
la source
J'ai utilisé :
et son travail bien
la source
Cela a fonctionné pour moi
[textview setEditable:NO];
Les réponses ci-dessus compliquent trop la situation.la source