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.
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.
}
Pour Swift 2.x, 3.x, 4.x, 5.x
textField.inputView = UIView()
fait l'affaire
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.
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
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)