Il n'y a pas de bouton "Terminé" sur le pavé numérique. Lorsqu'un utilisateur a fini de saisir des informations numériques dans un champ de texte, comment puis-je faire disparaître le pavé numérique?
Je pourrais obtenir un bouton "Terminé" en utilisant le clavier par défaut, mais les utilisateurs devraient alors basculer sur les touches numériques afin de saisir des nombres. Existe-t-il un moyen d'afficher un bouton "Terminé" sur le pavé numérique?
ios
iphone
user-input
Chilly Zhong
la source
la source
Voici une adaptation de la réponse de Luda pour Swift:
Dans la déclaration de votre sous-classe UIViewController, mettez
dans ViewDidLoad mis:
et ajouter les fonctions hoopla et hoopla (n'hésitez pas à choisir d'autres noms, changez simplement les noms des sélecteurs dans ViewDidLoad en conséquence
la source
UIBarButtonItemStyle.Bordered
est obsolète depuis iOS 8.0.UIBarButtonItemStyle.Plain
est suggéré à la place.L'astuce que j'ai vue consiste à créer un bouton transparent personnalisé de la taille de la vue entière, puis dans sa méthode de clic, à ce que le champ de texte démissionne en premier. L'utilisateur peut donc cliquer n'importe où en dehors du champ pour fermer le clavier.
la source
Une solution Swift 3 utilisant une extension. Idéal si vous avez plusieurs numériques
UITextField
objets dans votre application, car cela donne la flexibilité de décider, pour chacunUITextField
, d'effectuer une action personnalisée lorsque Terminé ou Annuler est appuyé.Exemple d'utilisation à l'aide des actions par défaut:
Exemple d'utilisation à l'aide d'une coutume action terminée :
la source
Voici une refonte de la réponse de Luda avec les changements suivants:
la vue des accessoires est automatiquement dimensionnée à la largeur du cadre d'application
la constante obsolète
UIBarButtonItemStyleBordered
est évitéele bouton "Terminé" est instancié comme
UIBarButtonSystemItemDone
Actuellement, le bouton "Terminé" est centré dans la vue des accessoires. Vous pouvez le positionner à gauche ou à droite en supprimant l'espace du côté pertinent.
J'ai omis un bouton "Annuler" car le clavier par défaut n'en a pas non plus. Si vous voulez un bouton "Annuler", je vous suggère de l'instancier comme un
UIBarButtonSystemItemCancel
et de vous assurer que vous ne supprimez pas la valeur d'origine dans votre champ de texte. Le comportement "Annuler" implémenté dans la réponse de Luda, qui écrase la valeur avec une chaîne vide, peut ne pas être ce que vous voulez.Pour plus d'informations sur la création de vues d'accessoires, consultez la documentation Apple sur les vues personnalisées pour la saisie de données . Vous souhaiterez probablement également consulter les pages de référence sur UIToolbar et UIBarButtonItem .
la source
[UIScreen mainScreen].applicationFrame
est déconseillé dans iOS 9. Utilisation[UIScreen mainScreen].bounds
La solution dans UIKeyboardTypeNumberPad et la touche de retour manquante fonctionnent très bien, mais uniquement s'il n'y a pas d'autres champs de texte non numériques sur l'écran.
J'ai pris ce code et l'ai transformé en UIViewController que vous pouvez simplement sous-classer pour faire fonctionner les pavés numériques. Vous devrez obtenir les icônes à partir du lien ci-dessus.
NumberPadViewController.h:
et NumberPadViewController.m:
Prendre plaisir.
la source
Voici le code le plus récent. Incluez simplement #import "UIViewController + NumPadReturn.h" dans votre viewController.
Voici le .h
Et eux
la source
Une solution beaucoup plus simple
la source
Si vous avez plusieurs champs numériques, je suggère de sous-classer UITextField pour créer un NumericTextField qui affiche toujours un clavier numérique avec un bouton terminé. Ensuite, associez simplement vos champs numériques à cette classe dans le générateur d'interface et vous n'aurez besoin d'aucun code supplémentaire dans aucun de vos contrôleurs de vue. Ce qui suit est la classe Swift 3.0 que j'utilise dans Xcode 8.0.
Swift 4.2
la source
J'ai trouvé la réponse de @ user1258240 assez concise étant donné que ce n'est pas aussi simple que de définir un
returnKeyType
propriété.Je voulais juste apporter ma propre approche "réutilisable" à ceci:
la source
SWIFT 3.0 Une saveur différente, en utilisant des parties de certaines réponses précédentes.
la source
Je décris une solution pour iOS 4.2+ ici mais le bouton de apparaît en fondu après l'apparition du clavier. Ce n'est pas terrible, mais pas idéal non plus.
La solution décrite dans la question liée ci-dessus inclut une illusion plus élégante pour fermer le bouton, où je fane et déplace verticalement le bouton pour donner l'apparence que le clavier et le bouton sont en train de fermer ensemble.
la source
La façon la plus simple est de
créer un bouton transparent personnalisé et de le placer dans le coin inférieur gauche, qui aura la même chose
CGSize
qu'un espace videUIKeyboardTypeNumberPad
. Basculez (affichez / masquez) ce bouton sur textFieldbecomeFirstResponder
, sur le bouton, cliquez respectivement.la source
Voici la solution la plus simple que j'ai rencontrée. J'ai appris cela du livre Beginning iOS 5 Development.
En supposant que le champ numérique est appelé
numberField
.Dans
ViewController
, ajoutez la méthode suivante:Dans
ViewController.m
, ajoutez le code suivant:Revenez au
nib
fichier.Utilities
casserole.Identity inspector
dessous de laUtilities
casserole.View
(dans le fichier nib). Assurez-vous de n'avoir cliqué sur aucun des éléments de la vue. Par souci de clarté, vous devriez voir UIView sousClass
dansIdentity inspector
.Connection Inspector
.Touch Down
et déposez la flèche sur l'File Owner
icône. (FYI ... L'icône du propriétaire du fichier s'affiche à gauche deView
et apparaît sous la forme d'un cube creux avec un cadre jaune.)closeKeyboard
.Maintenant, lorsque vous cliquez n'importe où sur l'arrière-plan de
View
, vous devriez pouvoir fermer le clavier.J'espère que cela vous aidera à résoudre votre problème. :-)
la source
J'ai modifié la solution de Bryan pour être un peu plus robuste, afin qu'elle fonctionne bien avec d'autres types de claviers qui pourraient apparaître dans la même vue. Il est décrit ici:
Créer un bouton TERMINÉ sur le pavé numérique iOS UIKeyboard
J'essaierais de l'expliquer ici, mais la plupart est du code à regarder qui ne pourrait pas facilement tenir ici
la source
Si vous connaissez à l'avance le nombre de chiffres à saisir (par exemple, un code PIN à 4 chiffres), vous pouvez annuler automatiquement après 4 pressions sur les touches, conformément à ma réponse à cette question similaire:
rejet du pavé numérique
Pas besoin d'un bouton supplémentaire terminé dans ce cas.
la source
Nous pouvons également rendre la solution "utilisateur touché ailleurs" encore plus simple si nous disons simplement à la vue de notre contrôleur de vue de terminer l'édition:
... en supposant que "toucher ailleurs rejette le clavier" est également le comportement souhaité pour tous les autres champs modifiables de la vue.
la source
Pour Swift 2.2, j'utilise ceci
la source
Toutes ces implémentations concernant la recherche de la vue du clavier et l'ajout du bouton terminé à la 3ème ligne (c'est pourquoi button.y = 163 b / c la hauteur du clavier est 216) sont fragiles car iOS continue de changer la hiérarchie des vues. Par exemple, aucun des codes ci-dessus ne fonctionne pour iOS9.
Je pense qu'il est plus sûr de trouver simplement la vue la plus haute, par [[[UIApplication sharedApplication] windows] lastObject], et d'ajouter simplement le bouton dans le coin inférieur gauche de celui-ci, doneButton.frame = CGRectMake (0, SCREEN_HEIGHT-53, 106 , 53); // mode portrait
la source
Swift 2.2 / J'ai utilisé la réponse de Dx_. Cependant, je voulais cette fonctionnalité sur tous les claviers. Donc dans ma classe de base j'ai mis le code:
Ensuite, appelez simplement addDoneButtonForTextFields sur self.view.subviews dans viewDidLoad (ou willDisplayCell si vous utilisez une vue de table) pour ajouter le bouton Terminé à tous les claviers.
la source