Popovers在iPad應用程序中大量使用,我非常喜歡它們。現在我想想如何在Mac上的AppKit中實現這個功能,因爲我有一個用例。我們可以在Mac Cocoa應用程序中有彈出嗎?
我需要一個NSWindow子類來完成覆蓋,還是我也可以使用普通視圖?
Popovers在iPad應用程序中大量使用,我非常喜歡它們。現在我想想如何在Mac上的AppKit中實現這個功能,因爲我有一個用例。我們可以在Mac Cocoa應用程序中有彈出嗎?
我需要一個NSWindow子類來完成覆蓋,還是我也可以使用普通視圖?
如果我正確地理解了你的話,你想要的東西是MAAttachedWindow(作者:Matt Gemmell),它是開源的。
或者,你可以看看文檔中Popover
例子。 https://developer.apple.com/library/mac/samplecode/Popover/Introduction/Intro.html
據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(右)酥料餅:
下面是如何設置的NSPopover,這是非常簡單的,可以在界面生成器大多完成。
在你的頭文件(.H)需要任何控制自定義您的NSView添加的代碼如下兩行:
@property (assign) IBOutlet NSPopover *popover;
- (IBAction)showPopover:(id)sender;
不要忘記將插座和動作連接到您的界面。
showPopover
方法在showPopover
方法,加入這一行顯示酥料餅:
[[self popover] showRelativeToRect:[sender bounds] ofView:sender preferredEdge:NSMaxYEdge];
它是由您來圖瞭解如何消除流行病;因爲它複製/粘貼有趣嗎?您可以手動執行(提示:嘗試使用close
)或更改behavior
屬性並讓系統執行此操作(請參閱下面的編輯)。
祝你好運,希望這有助於!
編輯
正如David in his comment指出:
解僱的酥料餅的另一種可能性是它的行爲設置爲瞬態。這允許用戶點擊彈出窗口外的任何地方使其消失
彈出窗口的行爲屬性設置它的顯示方式和消失方式。有三種行爲:
NSPopoverBehaviorApplicationDefined
- (默認),您的應用程序必須關閉酥料餅本身NSPopoverBehaviorTransient
- 當任何界面元素與酥料餅NSPopoverBehaviorSemitransient
外界交互的酥料餅被關閉 - 酥料餅是當popover的展示視圖中的任何界面元素都與popover外部交互時關閉。在Apple's Documentation瞭解更多詳情。
+1很好的答案 - 很好的編輯。解除popover的另一種可能性是將其設置爲Transient行爲。這允許用戶點擊彈出框外的任何地方使其消失。附:記得做2個連接(插座和動作)。 – David 2013-09-23 17:04:17
+1。它對我來說效果很好,而且還可以通過一些重命名將它移植到iPhone上。 – 2011-01-06 01:25:29
非常感謝,我會檢查出來,並將其答案標記爲已接受,如果它適用於我。 – brutella 2011-01-06 10:42:55
工程就像一個魅力;) – brutella 2011-01-08 11:49:59