2014-06-23 14 views
5

Ich bin nicht in der Lage zu sehen, warum das nicht funktioniert. Das Menü zeigt an, ist aber ausgegraut, wenn ich autoenablesItems als Standard belasse und die Aktionen nicht aufgerufen werden, wenn ich es auf false setze.NSMenu Selektor in Swift

class GameScene: SKScene { 
    // ... 
    func action1(sender: AnyObject) { 
     println("Urk, action 1") 
    } 

    func action2(sender: AnyObject) { 
     println("Urk, action 2") 
    } 

    func popUpMenu(#event: NSEvent) { 
     var theMenu = NSMenu(title: "Contextual menu") 
     theMenu.addItemWithTitle("Action 1", action: Selector("action1:"), keyEquivalent: "") 
     theMenu.addItemWithTitle("Action 2", action: Selector("action2:"), keyEquivalent: "") 
     //theMenu.autoenablesItems = false 
     NSMenu.popUpContextMenu(theMenu, withEvent:event, forView:self.view) 
    } 

    override func mouseDown(theEvent: NSEvent) { 
     self.popUpMenu(event: theEvent) // The menu shows 
    } 
} 

aktualisieren

Wie pro @ Chuck Antwort, müssen Sie Folgendes tun:

func popUpMenu(#event: NSEvent) { 
     var theMenu = NSMenu(title: "Contextual menu") 
     theMenu.addItemWithTitle("Action 1", action: Selector("action1:"), keyEquivalent: "") 
     theMenu.addItemWithTitle("Action 2", action: Selector("action2:"), keyEquivalent: "") 

     for item: AnyObject in theMenu.itemArray { 
      if let menuItem = item as? NSMenuItem { 
       menuItem.target = self 
      } 
     } 

     NSMenu.popUpContextMenu(theMenu, withEvent:event, forView:self.view) 
    } 
+0

Wo ist dieser Code? Sind Sie sicher, dass dieses Objekt in der Responder-Kette ist? – Chuck

+0

Es ist in einer SKScene und popUpMenu wird von mouseDown aufgerufen. – Grimxn

Antwort

4

Es ist wie Ihr Problem klingt, ist, dass ein NSMenuItem erstellt mit dem Verfahren ‚doesn t haben einen Empfänger, so verwendet es die Responder-Kette, und dieses Objekt ist nicht in der Responder-Kette. Sie können erzwingen, dass Ihr Objekt angezeigt wird, indem Sie die Ziele der Menüelemente auf self setzen.

+0

Gut gemacht! Absolut korrekt! – Grimxn

Verwandte Themen