弹出窗口大量用于iPad应用程序,我真的很喜欢它们.现在我想一想如何在Mac上的AppKit中实现它,因为我有一个用例.
我是否需要NSWindow子类来完成叠加?还是我还可以使用普通视图?
Sam*_*cer 20
根据Apple的开发人员文档,您可以使用内置的NSPopover类在OS X上使用内置的弹出窗口:
从OS X v10.7开始,AppKit通过NSPopover类为弹出窗口提供支持.弹出框提供了一种在屏幕上显示与现有内容相关的附加内容的方法.包含出现弹出窗口的现有内容的视图在此上下文中称为定位视图.您使用锚点来表示弹出窗口与其定位视图之间的关系.
这是NSPopover类的链接.您还可以看到日历(10.7+)应用程序和Safari应用程序(10.8+)中使用的NSPopovers示例.下图描绘了日历应用程序(左)和Safari(右)中的弹出窗口:

以下是如何设置NSPopover,它非常简单,主要可以在界面构建器中完成.
在头文件(.h)中添加以下两行代码:
@property (assign) IBOutlet NSPopover *popover;
- (IBAction)showPopover:(id)sender;
Run Code Online (Sandbox Code Playgroud)
不要忘记将插座和操作连接到您的界面.
showPopover在该showPopover方法中,添加此行以显示弹出窗口:  
[[self popover] showRelativeToRect:[sender bounds] ofView:sender preferredEdge:NSMaxYEdge];
Run Code Online (Sandbox Code Playgroud)由你决定如何解雇popover; 因为复制/粘贴有什么乐趣?您可以手动执行(提示:尝试使用close)或更改behavior属性并让系统执行此操作(请参阅下面的编辑).
祝你好运,希望这会有帮助!
编辑
正如大卫在评论中指出的那样:
解雇popover的另一种可能性是将其行为设置为Transient.这允许用户单击弹出窗口外的任何位置以使其消失
弹出框的行为属性设置它的显示和消失方式.有三种行为:
NSPopoverBehaviorApplicationDefined - (默认)您的应用必须关闭popover本身  NSPopoverBehaviorTransient - 当任何界面元素与弹出窗口外部交互时,弹出窗口将关闭  NSPopoverBehaviorSemitransient - 当弹出框的呈现视图中的任何界面元素与弹出窗口外部进行交互时,弹出窗口将关闭.|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           6943 次  |  
        
|   最近记录:  |