2012-07-15 2 views
2

나는 더 구체적 일 수 있었으면 좋겠지 만, 불행히도, 나는 할 수 없다. 모든 적절한 객체가 nil이 아니며 모든 적절한 메소드 호출이 성공적으로 끝났지 만 내 NSPopover은 절대로 표시되지 않습니다. 위임 메서드 중 어느 것도 호출되지 않습니다. 그들이 화면 이동을 시작하기 전에 프레임이 설정되어 있기 때문에NSPopover Not Appearing

// ivars 
NSPopover *tagPopover; 
NSViewController *tagPopoverViewController; 

// in method to display popover 
tagPopover = [[NSPopover alloc] init]; 
[tagPopover setBehavior: NSPopoverBehaviorApplicationDefined]; 
[tagPopover setDelegate: self]; 
tagPopoverViewController = [[MYViewController alloc] initWithNibName: @"MYViewController" bundle: nil]; 
[tagPopover setContentViewController: tagPopoverViewController]; 
[tagPopover setContentSize: tagPopoverViewController.view.frame.size]; 

[tagPopover showRelativeToRect: NSMakeRect(700, 400, 5, 5) // Screen coordinates 
         ofView: [[NSApp keyWindow] contentView] 
       preferredEdge: NSMinYEdge]; 
+0

@ Monolo, yes'-awakeFromNib'는 괜찮습니다. –

답변

3

는 좌표 시스템이 잘못 밝혀 :

NSRect theRect = [[NSApp keyWindow] convertRectFromScreen: NSMakeRect(700, 400, 5, 5)]; 
[tagPopover showRelativeToRect: theRect // Window Coordinates 
         ofView: [[NSApp keyWindow] contentView] 
       preferredEdge: NSMinYEdge]; 

먼저 윈도우의 좌표계로 변환 할 필요가 있었다.

1

나는 (그들이 xibs/스토리 보드에서 와서 예를 들어, 그들은 의미가), tagPopoverViewController.view.frame이 NSZeroRect이라고 생각한다. 그 라인이 필요하신가요? 문서에서는 contentSize가 content-view의 크기에 바인딩되어 있다고 언급합니다.

+0

아니면 다소 더러운 해킹인데 뷰의 부하를 강제로 초기화 한 후 뷰 컨트롤러에서'view '를 호출하십시오. – Monolo

+0

Nope :'tagPopoverViewController.view.frame : {{0, 0}, {281, 118}} ' –

+0

@Monolo'tagPopoverViewController.view.frame.size' 줄은 호출보기 ;-)를 수행합니다. –