2012-07-15 35 views
2

我真的希望我能更具體,但不幸的是,我不能。所有適當的對象都是非零,並且所有適當的方法調用都可以(大概)成功完成,但我的NSPopover從未出現過。也沒有任何委託方法被調用。NSPopover不出現

// 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,是的'-awakeFromNib'被稱爲罰款。 – 2012-07-15 22:37:42

回答

3

原來的座標系是錯誤的:

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

所需先將其轉換爲窗口的座標系。

1

我懷疑tagPopoverViewController.view.frame是NSZeroRect,因爲他們開始去之前屏幕幀設置爲(例如,他們是毫無意義的,因爲他們出來xibs /故事板)。你確定你需要這條線嗎?文檔提到contentSize與內容視圖的大小無關。

+0

或者,有點骯髒的黑客,在初始化後立即在視圖控制器上調用'view'來強制加載視圖。 – Monolo 2012-07-15 19:58:49

+0

Nope:'tagPopoverViewController.view.frame:{{0,0},{281,118}}' – 2012-07-15 20:01:43

+0

@Monolo行'tagPopoverViewController.view.frame.size' * does * call view ;-) – 2012-07-15 20:06:08