2011-08-04 3 views
3

Imaginez un clavier normal (comme l'anglais). Lorsque vous maintenez A enfoncé pendant un moment, un nouveau menu avec les boutons á, ä et autres apparaît. Et tout en maintenant le premier doigt sur l'écran, vous le faites glisser au-dessus d'un autre de ces boutons. Lorsque vous le faites glisser sur un bouton, il passe en mode surligné (je suppose) et lorsque vous le faites glisser, la surbrillance est désactivée. Si vous relâchez le doigt, les boutons contextuels disparaissent. Si vous maintenez le doigt sur l'un des boutons, le caractère de ce bouton est tapé dans le champ de texte ...Boutons contextuels de type clavier, iOS

Je n'ai pas encore trouvé un moyen de le faire. La longue chose de la presse n'est pas le problème. Le problème est de permettre la sélection séquentielle des nouveaux boutons tout en maintenant le premier doigt enfoncé - une seule pression devrait être nécessaire pour effectuer cela.

La touche permettant plusieurs sélections existe également dans l'écran de verrouillage du code qui s'affiche lorsque vous accédez à Paramètres pour modifier/modifier les paramètres actuels du code d'accès. Vous pouvez appuyer sur la touche 5 et la maintenir enfoncée, mais si vous faites glisser ce doigt jusqu'à 2, 5 est désélectionné et 2 est sélectionné et ainsi de suite, sans jamais relâcher le doigt. (Un champ UITextField avec "pavé numérique" a la même fonction)

Quelqu'un a-t-il une idée?

+0

Très bien, j'ajoute une prime pour cela. Il semble que UIButton "normal": s n'est pas assez bon pour le retirer. Aussi, si vous essayez d'imiter le clavier japonais à dix touches d'iOS (que j'essaie actuellement de faire), vous remarquerez que pour une touche (comme は), il n'y a pas seulement les états normaux UIControl comme Normal, Surligné, Sélectionné, mais aussi quelques autres - comme deux types différents de surlignés (je ne sais pas vraiment comment les décrire vraiment) et puis il y a le menu contextuel où il devrait y avoir au moins quelques états de plus. Peut-être que UIControl n'est pas suffisant pour le faire. – Jonny

Répondre

3

vous devez utiliser les touches touchBegan:, touchesMoved: et touchEnded: méthodes pour détecter quand le doigt est en contact et quand il est levé. Vérifiez le Apple documentation. Vous devrez ajouter la sous-vue affichant les caractères supplémentaires en appuyant longuement (ce qui, comme vous le dites, vous l'avez déjà fait), puis utilisez les touches tactiles pour confirmer que le doigt est toujours en contact. Sélectionnez le caractère sur touchesEnded:

+0

Peut-être un moyen d'atteindre l'objectif, mais comme j'ajoute des UIButtons normales, j'aimerais les faire fonctionner normalement avec différentes images/arrière-plans en fonction de l'état (normal, hl, sélectionné) et ainsi de suite.Autant que possible en utilisant les UIButtons déjà existantes serait préférable. – Jonny

1

On dirait que vous pourriez le faire de cette façon avec IBAction méthodes et callbacks geste (ne fonctionne que sur iOS 4.0 et versions ultérieures):

  • sur UIControlEventTouchDown: mettre en évidence le caractère actuel
  • sur déclencher un UILongPressGestureRecognizer lié à chaque touche individuelle: ouvrir le menu pour le caractère en surbrillance directement au-dessus du caractère courant (pour les claviers placés en bas) ou directement en dessous du caractère en surbrillance (pour les claviers en haut)
  • lors du déclenchement d'un UITapGestureRecognizer lié à chaque touche: sélectionner les caractères mis en évidence
  • sur UIControlEventTouchUpInside dans le menu multi-caractères: sélectionner les caractères mis en évidence
  • sur UIControlEventTouchUpOutside: annuler la sélection de plusieurs caractères
+0

Cette réponse est beaucoup plus élégante. :) –

0

Une approche consiste à utiliser des balises pour chaque bouton et un interrupteur pour déterminer quel bouton a été pressé, même si cela prendrait un certain temps pour obtenir tous les boutons mis en place et tout ... L'idée Touches Began/Moved/Ended est assez intelligent, mais je ne suis pas sûr de savoir comment vous le feriez en utilisant des boutons. Peut-être utiliser une image pour chaque clé et modifier par programme les images clés.