2011-01-05 114 views

回答

12

如果我正確地理解了你的話,你想要的東西是MAAttachedWindow(作者:Matt Gemmell),它是開源的。

MAAttachedWindow

+0

+1。它對我來說效果很好,而且還可以通過一些重命名將它移植到iPhone上。 – 2011-01-06 01:25:29

+0

非常感謝,我會檢查出來,並將其答案標記爲已接受,如果它適用於我。 – brutella 2011-01-06 10:42:55

+0

工程就像一個魅力;) – brutella 2011-01-08 11:49:59

18

Apple's Developer Documentation,你可以使用內置的popovers OS X上使用內置NSPopover類:

開始在OS X v10.7,通過了AppKit的方式提供popovers支持NSPopover類。彈出窗口提供了顯示與屏幕上現有內容相關的其他內容的方法。包含現有內容的視圖(從中彈出)在本文中被稱爲定位視圖。您使用錨來表示彈出窗口和其定位視圖之間的關係。

這是鏈接到NSPopover class。您還可以看到Calendar(10.7+)應用程序和Safari應用程序(10.8+)中使用的NSPopovers示例。下圖說明在日曆應用中(左)和Safari(右)酥料餅:

Use of NSPopover in Mac OS X


下面是如何設置的NSPopover,這是非常簡單的,可以在界面生成器大多完成。

  1. 在界面構建器中向您的XIB添加NSPopover項目。這將創建NSPopover及其視圖控制器。
  2. 接下來,通過界面構建​​器將自定義NSView拖動到XIB中。這將是酥料餅的視圖控制器視圖
  3. 與你在你的酥料餅
  4. 在你的頭文件(.H)需要任何控制自定義您的NSView添加的代碼如下兩行:

    @property (assign) IBOutlet NSPopover *popover; 
    - (IBAction)showPopover:(id)sender; 
    

    不要忘記將插座和動作連接到您的界面。

  5. 在您的實現,合成酥料餅並添加showPopover
  6. 方法在showPopover方法,加入這一行顯示酥料餅:

    [[self popover] showRelativeToRect:[sender bounds] ofView:sender preferredEdge:NSMaxYEdge]; 
    

它是由您來圖瞭解如何消除流行病;因爲它複製/粘貼有趣嗎?您可以手動執行(提示:嘗試使用close)或更改behavior屬性並讓系統執行此操作(請參閱下面的編輯)。

祝你好運,希望這有助於!


編輯

正如David in his comment指出:

解僱的酥料餅的另一種可能性是它的行爲設置爲瞬態。這允許用戶點擊彈出窗口外的任何地方使其消失

彈出窗口的行爲屬性設置它的顯示方式和消失方式。有三種行爲:

  • NSPopoverBehaviorApplicationDefined - (默認),您的應用程序必須關閉酥料餅本身
  • NSPopoverBehaviorTransient - 當任何界面元素與酥料餅
  • NSPopoverBehaviorSemitransient外界交互的酥料餅被關閉 - 酥料餅是當popover的展示視圖中的任何界面元素都與popover外部交互時關閉。

Apple's Documentation瞭解更多詳情。

+2

+1很好的答案 - 很好的編輯。解除popover的另一種可能性是將其設置爲Transient行爲。這允許用戶點擊彈出框外的任何地方使其消失。附:記得做2個連接(插座和動作)。 – David 2013-09-23 17:04:17

相關問題