2010-11-23 15 views
18

Peut-être l'heure est en retard, mais je ne peux pas trouver où je peux définir l'ordre de tabulation globale de ma boîte de dialogue de visionneuse d'interface, tout comme je peux avec Visual Studio.Onglet Ordre dans le constructeur d'interface?

Ai-je raté quelque chose? L'ordre de tabulation est tout tordu. Commande-R pour simuler le montre.

+0

S'il vous plaît modifier votre question d'inclure une capture d'écran du « ordre de tabulation » vous faites référence, et ce que vous trouvez « tordu ». –

Répondre

36

Le terme Cocoa que vous recherchez est "boucle de vue clé". Utilisez les prises initialFirstResponder et nextKeyView pour connecter les vues ensemble dans l'ordre dans lequel vous souhaitez les parcourir. Notez que les éléments pouvant recevoir le focus du clavier changeront en fonction du paramètre Full Keyboard Access (dans les préférences système> Keyboard); Si elle est désactivée, la tabulation passera sur divers éléments de la boucle de votre vue clé.

Ceci est mentionné dans la documentation here.

+1

Merci. Existe-t-il un moyen de définir la commande à partir du constructeur d'interface lui-même? Je veux dire, si vous venez de construire quelque chose à partir de zéro, il aura un ordre de tabulation donné, basé je crois sur l'ordre de la création du contrôle. Si j'ajoute le dernier contrôle dans la «première position» sur la vue elle-même, elle sera toujours la dernière, bien qu'elle semble avoir été la première. Je suppose que ma question est de savoir s'il existe un moyen de modifier cette commande à partir de l'interface constructeur lui-même, et non par programmation si possible. – JasonGenX

+3

Oui, quand je dis "points de vente ... connecter les vues ensemble" je parle de choses que vous pouvez faire à partir de Interface Builder. Vous utilisez la sortie de la fenêtre initialFirstResponder de la fenêtre pour définir la "première position". –

+1

Pour la postérité, un aperçu qui met en évidence le premier répondeur actuel et imprime la boucle de la vue-clé dans la console: https://gist.github.com/mittsh/6668638 –

2

Soit les points de vente sont nommés a, b et c. Mac onglet par défaut commande est a -> b -> c -> a

Mais Votre commande onglet souhaité est a -> c -> b ->a:

enter image description here

utilisant IB:

Set a comme initialFirstResponder.

Ensuite, mettez nextKeyView en conséquence en tant que a to c, c to b and c to a.

Mais je préfère utiliser des codes, ici il devient plus facile d'en ajouter d'autres. Comme dans l'interface utilisateur complexe, il peut y avoir plus de 30 contrôles et vous devrez peut-être mélanger et même insérer un nouveau contrôle!

Ainsi, vous pouvez obtenir le même que:

[self.a setNextKeyView:self.c]; 
[self.c setNextKeyView:self.b]; 
[self.b setNextKeyView:self.a]; 
+0

Cela ne fonctionne pas lorsque certaines vues sont masquées par défaut et deviennent visibles ultérieurement. – Etan

+0

@Etan: pour de tels cas, vous devez faire attention en définissant son runtime nextKeyView en fonction de la vue visible (en haut). –