62 votes

Désactiver le clavier UITextField ?

J'ai mis un clavier numérique dans mon application pour saisir des chiffres dans une vue de texte, mais pour saisir des chiffres, je dois cliquer sur la vue de texte. Une fois que j'ai cliqué, le clavier normal s'affiche, ce que je ne veux pas.

Comment puis-je désactiver complètement le clavier ? Toute aide est la bienvenue.

105voto

RohinNZ Points 1197

La propriété inputView du champ UITextField est nulle par défaut, ce qui signifie que le clavier standard est affiché.

Si vous lui attribuez 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 à la fois le clavier et le curseur clignotant, utilisez cette approche :

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

0 votes

La réponse de Caleb ci-dessous explique cela, mais je voulais ajouter que toute UIView peut être défini comme le inputView . Ainsi, la vue s'animera et s'éteindra de la même manière que le clavier standard.

0 votes

Ceci est utile lors du développement d'une extension d'application clavier personnalisée. Si vous incluez une UISearchBar ou une UITextField dans le clavier personnalisé, il essaiera d'afficher le clavier (bien que ce soit DANS un clavier), ce qui signifie qu'il va tuer votre clavier actuel à partir de ses vues / hiérarchie de contrôleurs et ensuite le recréer. Je l'ai résolu avec l'aide de ce hack de la vieille école. Merci !

0 votes

Enfin, j'ai utilisé une approche plus propre en utilisant le proxy d'apparence, mais en utilisant le même concept : [[UITextField appearanceWhenContainedIn :[UISearchBar class], nil] setInputView :[UIView new]] ;

72voto

Martin Romañuk Points 571

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

textField.inputView = UIView()

fait l'affaire

4 votes

Martin et Satish l'ont encore fait

0 votes

Vous pouvez masquer l'accessoryView avec textField.inputAccessoryView = UIView() et vous pouvez cacher le curseur avec textField.tintColor = .white également (Swift 5.x).

0 votes

Ça marche comme sur des roulettes ! :)

5voto

Caleb Points 72897

S'il s'agit d'un UITextField, vous pouvez définir son paramètre enabled propriété à NO.

Si c'est un UITextView, vous pouvez implémenter -textViewShouldBeginEditing: dans son délégué pour qu'il renvoie NO, afin qu'il ne commence jamais à éditer. Ou vous pouvez le sous-classer et surcharger -canBecomeFirstResponder pour rendre le NON. Vous pouvez également tirer parti de son comportement d'édition et placer vos boutons numériques dans une vue que vous utilisez comme la vue de texte inputView . Ceci est censé faire en sorte que les boutons s'affichent lorsque la vue texte est modifiée. Ce n'est pas forcément ce que vous souhaitez.

4voto

jcane86 Points 558

Selon la façon dont fonctionnent vos boutons existants, cela pourrait les casser, mais vous pouvez empêcher le clavier de s'afficher en définissant la propriété editable du textView sur NO

myTextView.editable = NO

2 votes

Il a demandé UITextField, pas UITextView.

2voto

David Points 1031

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

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 

n'a tout simplement pas fonctionné comme prévu pour deux champs de texte, la seule solution que j'ai trouvée est la suivante

    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 pour un textField cible ( Liste DropDownList dans mon cas) et en afficher un par défaut lorsque l'utilisateur passe au deuxième champ de texte ( Numéro de compte sur ma capture d'écran)

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X