web-dev-qa-db-fra.com

Désactiver le clavier UITextField?

J'ai mis un clavier numérique dans mon application pour saisir des nombres dans une vue texte, mais pour saisir des nombres, je dois cliquer sur la vue texte. Une fois que je le fais, le clavier normal apparaît, ce que je ne veux pas.

Comment désactiver complètement le clavier? Toute aide est grandement appréciée.

56
michael

La propriété inputView de UITextField est nulle par défaut, ce qui signifie que le clavier standard s'affiche.

Si vous lui affectez une vue d'entrée personnalisée, ou simplement une vue factice, le clavier n'apparaîtra pas, mais le curseur clignotant apparaîtra toujours:

UIView* dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];    
myTextField.inputView = dummyView; // Hide keyboard, but show blinking cursor

Si vous souhaitez masquer le clavier et le curseur clignotant, utilisez cette approche:

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    return NO;  // Hide both keyboard and blinking cursor.
}
98
RohinNZ

Pour Swift 2.x, 3.x, 4.x, 5.x

textField.inputView = UIView()

fait l'affaire

56
Martin Romañuk

S'il s'agit d'un UITextField, vous pouvez définir sa propriété enabled sur NO.

S'il s'agit d'un UITextView, vous pouvez implémenter -textViewShouldBeginEditing: dans son délégué pour retourner NO, afin qu'il ne commence jamais à éditer. Ou vous pouvez le sous-classer et remplacer -canBecomeFirstResponder pour retourner NON. Ou vous pouvez profiter de son comportement d'édition et placer vos boutons numériques dans une vue que vous utilisez comme inputView de la vue texte. Cela est censé provoquer l'affichage des boutons lors de la modification de la vue texte. Cela peut ou non être ce que vous voulez.

4
Caleb

Selon la façon dont vos boutons existants fonctionnent, cela peut les casser, mais vous pouvez empêcher le clavier de définir la propriété modifiable de textView sur NO

myTextView.editable = NO
3
jcane86

J'ai le même problème lorsque j'avais 2 champs de texte sur la même vue. Mon but était d'afficher un clavier par défaut pour un champ de texte et de le cacher pour le second et d'afficher à la place une liste déroulante.

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 

n'a tout simplement pas fonctionné comme je m'y attendais pour 2 champs de texte, la seule solution de contournement que j'ai trouvée était

    UIView* dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];    
    myTextField.inputView = dummyView; 
    myTextField.inputAccessoryView = dummyView; 
    myTextField.tintColor =  myTextField.backgroundColor; //to hide a blinking cursor

Cela masquera totalement le clavier d'un champ de texte cible ( DropDownList dans mon cas) et en affichera un par défaut lorsque l'utilisateur passera au 2e champ de texte ( Numéro de compte sur ma capture d'écran)

enter image description here

1
David

Pour désactiver le clavier UITextField:

  1. Allez dans Main.Storyboard
  2. Cliquez sur UITextField pour le sélectionner
  3. Afficher l'inspecteur d'attributs
  4. Décochez la Interaction utilisateur activée

Pour désactiver le clavier UITextView:

  1. Allez dans Main.Storyboard
  2. Cliquez sur UITextView pour le sélectionner
  3. Afficher l'inspecteur d'attributs
  4. Décochez le Modifiable Comportement
0
Alzayed