Argument(s) dans une IBAction

Bonjour,


 


Il existe dans IB, panneau bindings, un lien mentionné "Argument"


 


Je n'arrive pas à  trouver plus que ça dans la doc:



 



argument

A multiple-value binding that specifies the object passed as a parameter to the selector.


When argument is bound, a new binding, argument2, is exposed and can be bound. Binding to argument2 causes argument3 to be exposed, and so on.


The objects specified in the argument bindings are passed as parameters to the selector specified in the target binding when the NSButton is clicked.


Availability:
Available in OS X v10.3 and later.



Ne parlons pas de Google, je dois chercher avec les faux mots-clés, c'est le silence à  ce sujet.


 


Deux questions:


1. Que peut-on passer comme arguments?


2. Comment le(s) récupère-t-on dans le IBAction?


 


Merci!


Mots clés:

Réponses

  • 1/ Chaque argument peut-être de n'importe quel type, pourvu qu'il soit compatible avec l'objet auquel il est lié, ou bien compatible avec le Value Transformer spécifié.


     


    2/ Il n'y a pas de IBAction lorsqu'on utilise le binding. Soit le bouton déclenche un IBAction (avec un prototype prédéfini), soit le bouton est lié ("bindé") à  une action dont le prototype est totalement libre ; c'est le champ Selector Name sous IB qui permet de définir le nom de la méthode, ses paramètres sont ceux définis sur le binding du bouton.


  • laudemalaudema Membre
    mai 2013 modifié #3

    Ce qui est pratique c'est qu'on peut avoir plusieurs arguments et cerises sur le gâteau des arguments qui reprennent des données du xib genre (id) controller.selection ou (NSArray*)contrôler.selectedObjects.


     


    Ce qui ne l'est pas c'est qu'on a donc accès qu'à  des propriétés et qu'on a plus accès à  sender : il est impossible de passer en argument quelque chose qui n'est pas l'aboutissement d'un chemin de clef d'un objet du xib et il est impossible de savoir qui est sender : une méthode ne pourra servir que pour un bouton (ou alors un de ses clones).




  • Ce qui ne l'est pas c'est qu'on a donc accès qu'à  des propriétés et qu'on a plus accès à  sender : il est impossible de passer en argument quelque chose qui n'est pas l'aboutissement d'un chemin de clef d'un objet du xib et il est impossible de savoir qui est sender : une méthode ne pourra servir que pour un bouton (ou alors un de ses clones).




     


    Je ne suis pas d'accord. On peut passer en paramètre l'objet lui-même avec le keyPath self.

  • berfisberfis Membre
    mai 2013 modifié #5

    Mais dites-moi ça a l'air intéressant tout ça... à  condition de ne pas s'y perdre.


     


    J'ai envie d'implémenter un bouton qui se trouve dans de multiples vues d'une NSCollectionView. Donc si j'ai bien compris:


    Dans IB, je peux lier le titre d'un bouton à  CollectionViewItem.representedObject.name... (name est une propriété de l'objet lié à  cette vue)


    J'aimerais maintenant que le bouton envoie en paramètre le CollectionViewItem.representedObject lui-même (qu'il m'indique, en somme "Je me situe sur cette cellule de la collectionView". Je mets donc ce chemin en argument.


     


    Ensuite quoi? je définis une méthode dans mon document, donc pas une IBAction, mais par exemple:


    - (void) onMeClique : (id)button withParameter: (id)param ?


     


    Et de retour dans IB, je mets le sélecteur du bouton à  FileOwner onMeClique?


     


    C'est tout nouveau, merci de votre patience...


     


    (Après quelques essais...)


    J'arrive effectivement à  transmettre le representedObject comme paramètre à  ma méthode -(void) clicked: mais je n'arrive pas à  transmettre le bouton lui-même selon la méthode de jpimbert. Vous me donnez le truc?


  • laudemalaudema Membre
    mai 2013 modifié #6


    Je ne suis pas d'accord. On peut passer en paramètre l'objet lui-même avec le keyPath self.




    Comment fais tu pour choisir self dans le popup "Bind to" ?


    Chez moi il faut choisir entre Application/File owner/Font Manager/Shared User defaults controller et les objets "cubes" ou controllers présents dans le xib (AppDelegate/ArrayController..).


    Désolé, je n'ai pas encore trouvé le moyen de savoir quel bouton appelle la méthode :(


    Le seul tourne autour que je puisse envisager est de faire une propriété IBOutlet NSButton *button d'un des objets du xib (AppDelegate, FileOwner) et de passer le chemin FileOwner.button dans l'un des arguments ..


  • berfisberfis Membre
    mai 2013 modifié #7

    Bon en fait ce n'est pas si grave, j'ai tout le representedObject de la vue à  laquelle appartient le bouton... après tout, si je voulais le bouton lui-même, IBAction me l'aurait donné...


     


    Il y a des cas où ça pourrait être gênant, c'est si j'ai besoin de son état, de sa valeur, de son titre... ou de sa frame si je veux par exemple utiliser un popover...


     


    Mais bon, il y a sûrement moyen de s'en sortir  <_<


Connectez-vous ou Inscrivez-vous pour répondre.