2009-11-01 9 views
0

Si je nommerai un widget dans Interface Builder, puis-je écrire une méthode qui reçoit cliquez des événements sur ce bouton:Comment obtenir Interface nom Builder de id

- (IBAction)btnTouchDown:(id)sender 
{ 
    // how can you identify the button here, 
    // if several different buttons map 
    // their "Touch" event to this same function? 
    // I know you can look at its text but that seems really clumsy 
    // can I somehow get its INTERFACE BUILDER NAME? 

    // I named each uniquely in interface builder, 
    // under "Identity"/"Name" 
    // Or is my only recourse to tie EACH BUTTON to its own handler function? 
} 

Répondre

1

Cliquez sur le bouton constructeur de l'interface, appuyez sur CMD + 2 (ou dans la boîte de dialogue d'information, deuxième onglet) et faites glisser le cercle de Retouchez à l'intérieur à Le propriétaire du fichier de la fenêtre yourView.xib, puis il vous permettra de sélectionner l'une des méthodes qui a la signature - (IBAction) method:(id)sender. Choisissez celui que vous voulez associer à ce bouton :)

Vous dites que vous ne voulez pas faire une méthode pour chaque bouton, mais en fait c'est la meilleure façon selon moi, plutôt que d'avoir une énorme méthode monolithique qui manipule chacun des boutons et vérifie chaque fois pour voir lequel d'entre eux il est. En utilisant le processus que j'ai mentionné ci-dessus, vous pouvez attacher spécifiquement une méthode de gestionnaire à un bouton particulier, en gardant les choses agréables, bien rangées et logiques.

Si vous voulez vraiment faire cela, vous pouvez également tester le numéro de l'étiquette.

+0

Mais je veux utiliser la même fonction pour gérer tous les boutons. ne puis-je pas utiliser une instruction IF dans mon gestionnaire d'événements et cocher "quel bouton a été pressé" de cette façon? – bobobobo

+0

J'ai ajouté cela dans ma dernière édition. Vous pourriez penser que c'est une approche simple, mais c'est beaucoup plus facile si vous avez différentes méthodes qui traitent des chemins logiques différents. De cette façon, une grosse fonction ne sera pas déformée par un bug de l'une des branches du gestionnaire de boutons. C'est beaucoup plus facile à maintenir. Mais comme je l'ai dit, si vous voulez vraiment, vérifiez l'attribut tag. Vous avez raison de vérifier que le texte est maladroit (et inutilement cher), mais la même chose peut être dite à propos d'avoir une grande méthode qui gère TOUS vos boutons. –

+0

s'il vous plaît super gras les mots __tag nombre__: D – bobobobo

1

vous devez définir le bouton comme une instance variable dans votre contrôleur de vue, puis utilisez le pragma IBOutlet pour le faire connaître à IB. Ainsi, par exemple, vous feriez dans votre contrôleur de vue:

UIButton IBOutlet *mybutton; 

Après avoir défini comme cela, il va apparaître dans vos connexions IB où vous pouvez l'associer avec le bouton approprié

+0

C'est IBOutlet UIButton * mybutton; Je pense. –

+0

effectivement l'ordre n'a pas d'importance comme avec la plupart des modificateurs – ennuikiller

Questions connexes