selector; Variable übergeben möglich?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • selector; Variable übergeben möglich?

    Hallo,


    also ...

    Ich habe jetzt ein Menü mit verschiedenen Unterpunkten.
    Dieses Menü wird automatisch erstellt und besteht aus x Menüpunkten.

    Jeder Menüpunkt verweist mithilfe eines selectors auf eine Methode
    (action:@selector(menuItemAction: )...)



    Ich bin noch totaler Anfänger ... aber bitte habt Verständnis :)

    Mein Problem ist;

    Alle Menüpunkte verweisen auf die selbe Methode (menuItemAction).

    Ist es möglich da noch eine Variable oder einen Wert mit dem selector quasi mitzuschicken
    damit die Methode menuItemAction flexibel anpassen kann, was passieren soll wenn auf ein Menüpunkt geklickt wird?


    Also sowas wie menuItemAction: (int) x
    Dann weiß die Methode menuItemAction; "Ahh, der Menüpunkt x wurde geklickt, also passiert nun das und das ..."
  • RE: selector; Variable übergeben möglich?

    Deine Methode menuItemAction: sollte ja so definiert sein:

    Quellcode

    1. menuItemAction:(id)sender;
    Das bedeutet, die Action Methode bekommt den Sender übergeben, was in Deinem Fall das MenüItem ist. Du kannst jedem Item einen eindeutigen Tag geben (setTag: ) und diesen dann in der Actionmethode abfragen:

    Quellcode

    1. [sender tag];
    Den Tag kannst Du dann schön per switch-case-Anweisung auswerten.

    Michael
  • RE: selector; Variable übergeben möglich?

    ja super, irgendwie hab ich an sowas nicht gedacht.

    Allerdings bekomm ich komische Fehlermeldungen wenn ich versuche meine Items zu taggen;

    das war mein Versuch auf die Schnelle;


    Quellcode

    1. int v = 2;
    2. newItem = [[NSMenuItem allocWithZone:[NSMenu menuZone]]
    3. initWithTitle:[finderContentArray objectAtIndex:x]
    4. action:@selector(menuItemAction:)
    5. setTag:v
    6. keyEquivalent:@""];


    Aber er will mir das nicht kompilieren.

    Hab ich das an der falschen Stelle, falsch definiert ..?
  • Hallo,

    Hab ich das an der falschen Stelle, falsch definiert ..?

    Treffer zu 100 % ;)

    In der Doku steht: initWithTitle:action:keyEquivalent:

    Warum setzt Du dann da einfach setTag ein?

    Erstelle zunächst das NSMenuItem und dann weist Du ihm den Tag zu:

    Quellcode

    1. NSMenuItem *theMenuItem = [NSMenuItem ...
    2. [theMenuItem setTag:1];


    Ich weiß nicht ob ich das generell falsch sehe, aber ich verwende nie int.

    Viele Grüße