Dans plusieurs cas, je souhaite ajouter une barre d'outils en haut du clavier de l'iPhone (comme dans iPhone Safari lorsque vous naviguez dans des éléments de formulaire, par exemple).
Actuellement, je spécifie le rectangle de la barre d'outils avec des constantes, mais parce que d'autres éléments de l'interface sont en flux - les barres d'outils et les barres de navigation en haut de l'écran - chaque fois que nous faisons un changement mineur d'interface, la barre d'outils se désaligne.
Existe-t-il un moyen de déterminer par programme la position du clavier par rapport à la vue actuelle?
la source
Donc en gros:
Dans la méthode init:
Et puis avoir des méthodes mentionnées ci-dessus pour ajuster la position de la barre:
Pourrait le rendre joli en animant le changement de position en l'enveloppant dans
la source
UIKeyboardFrameBeginUserInfoKey
qui donnent les mêmes informations.UIKeyboardFrameEndUserInfoKey
pour obtenir le cadre final (en coordiantes d'écran) du clavier. Vous pouvez également utiliserUIKeyboardAnimationDurationUserInfoKey
etUIKeyboardAnimationCurveUserInfoKey
pour obtenir le reste des paramètres dont vous avez besoin pour correspondre exactement au comportement du clavier.Ceci est basé sur la réponse existante de tonklon - j'ajoute simplement un extrait de code qui montre une barre d'outils noire semi-transparente sur le dessus du clavier, ainsi qu'un bouton "terminé" à droite:
et le
-resignKeyboard
ressemble à:J'espère que cela aide quelqu'un.
la source
Si vous vous inscrivez aux notifications clavier, c'est-à-dire
UIKeyboardWillShowNotification
UIKeyboardWillHideNotification
, etc., la notification que vous recevrez contiendra les limites du clavier dans leuserInfo
dict (UIKeyboardBoundsUserInfoKey
).Voir la
UIWindow
référence de la classe.la source
Dans la version 3.0 et supérieure, vous pouvez obtenir la durée et la courbe de l'animation à partir du
userInfo
dictionnaire des notifications.par exemple, pour animer la taille de la vue pour faire de la place pour le clavier, enregistrez-vous pour le
UIKeyboardWillShowNotification
et faites quelque chose comme ce qui suit:Faites une animation similaire pour
UIKeyboardWillHideNotification
.la source
Créez cette méthode et appelez-la sur ViewWillLoad:
la source
Il n'y a aucun moyen (AFAIK) d'obtenir les dimensions de la vue du clavier. Il est cependant constant, du moins dans toutes les versions d'iPhone jusqu'à présent.
Si vous calculez la position de la barre d'outils comme un décalage par rapport au BAS de votre vue et que vous tenez compte de la taille de votre vue, vous ne devriez pas avoir à vous soucier de la présence ou non d'une barre de navigation.
Par exemple
Au lieu d'une définition, vous pouvez facilement créer une
keyboardHeight
fonction qui renvoie la taille en fonction de l'affichage du clavier et déplacer ce positionnement de la barre d'outils dans une fonction distincte qui réorganise votre disposition.Cela peut également dépendre de l'endroit où vous effectuez ce positionnement car il est possible que la taille de votre vue puisse changer entre le chargement et l'affichage en fonction de la configuration de votre barre de navigation. Je crois que le meilleur endroit pour le faire serait en vueWillAppear.
la source