2015-02-02 6 views
0

mouseDown/rightMouseDown 이벤트를 처리하기 위해 NSView를 서브 클래스했습니다. 이제 마우스 오른쪽 버튼을 클릭하여 상황에 맞는 NSMenu (IBOutlet)를 팝업으로 표시하려고합니다.팝업 NSView (Swift)를 오른쪽 클릭하십시오.

NSMenu.popUpContextMenu(statusMenu, withEvent: theEvent, forView: self) 

...하지만 "statusMenu는 AppDelegate의 멤버가 아닙니다"라고 표시됩니다. 수업 외부의 vars에 어떻게 액세스 할 수 있습니까?

편집 :

IST AppDelegate에에 위치한 함께 IBOutlet :

@IBOutlet weak var statusMenu: NSMenu! 

내가 내 사용자 지정 NSView의에서 호출 시도를 :

class customView : NSView { 
    override func rightMouseDown(theEvent : NSEvent) { 
    // NSMenu.popUpContextMenu ??? 
    } 
} 
+0

NSView 또는 AppDelegate의 IBOutlet은 어디에 있습니까? 그리고 NSView를 어디에서 호출하고 있습니까? 또한,'.self'의 점은 오타라고 가정합니다. – Grimxn

+0

위의 내용을 편집했습니다. 맞습니다. IBOutlet은 AppDelegate에 있습니다. 서브 클래 싱 된 NSView에서 NSMenu를 호출하려고했습니다. – ixany

답변

1

당신이 할 수있는 여러 가지 방법이 있습니다 :

1) NSView에 IBOutlet을 만들고 t 그는 그것에 NSMenu. 몇 가지 이유가 메뉴에 두 개의 참조를하는 당신이 원하는하지 않은 경우

2 )

3) (당신이 AppDelegate에 연결, 당신의 NSView에 함께 IBOutlet을 만들고 그 출구를 통해 메뉴를 참조하십시오)에 NSView에서 AppDelegate에 런타임에 참조하세요 - 구문

var appDelegate = NSApplication.sharedApplication().delegate as AppDelegate

이며 그 메뉴를 통해 참조.

"AppDelegate"는 AppDelegate 클래스의 실제 이름 (일반적으로 "AppDelegate"일 필요는 없음)입니다. 두 경우의 IBOutlet 유형에도 똑같이 적용됩니다.

+0

서브 클래스 된 NSView 클래스 customView : NSView {} 안에 IBOutlet을 만들지 못했습니다. 그러나 제 3의 해결책은 나의 문제를 해결했다! 정말 고맙습니다. – ixany