Popover 初探

Popover 是一个新型的弹出窗口。 

apple 文档里面这样说: 

NSPopover类提供了一种方法在现有相关内容在屏幕上显示更多的内容。Popover窗口定位相对于现有内容。

锚点(anchor )是用来表示这两个单元的内容之间的关系。Popover窗口指定视觉特征出现,以及确定哪些用户交互行为将导致弹出窗口关闭。瞬态Popover窗口关闭以应对大多数的用户交互行为,而

而半瞬态Popover窗口关闭当用户与包含弹出窗口的定位视图的窗口。应用程序定义的Popover窗口的行为通常不由开发人员方面关闭。

系统相对于其定位视图自动定位每个popover窗口,popover窗口跟随其定位视图移动。定位视图内的一个定位矩形内可以指定额外的粒度。

popover窗口通过适当的delegate 方法实现拖动时,它可以分离成为一个独立的窗口。


我英语还不够好,就算借助翻译,也觉得很难懂。好在我们大致知道了。我们先不做任何说明,先实现一个例子,将一个这样的窗口显示出来,并做到控制它关闭。

首先建立一个cocoa 普通应用。

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
    <pre name="code" class="plain" style="color: rgb(187, 44, 162); font-size: 11px; font-style: italic;">@IBOutlet weak var window: NSWindow!

 
    func applicationDidFinishLaunching(aNotification: NSNotification) {
        // Insert code here to initialize your application
    }

    func applicationWillTerminate(aNotification: NSNotification) {
        // Insert code here to tear down your application
    }

contentViewController  属性 -- 视图控制器管理popover的内容

现在我们需要提供一个ViewController,来给popover提供显示内容。要做到这一点,手下要建立一个NSViewController的子类,选择建立xib。你可以在这个xib里面添加一些内容,文本了,按钮拉等等。反正我们这次不打算用,你可以任意。

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    var popover : NSPopover?

    lazy var poverController : PopoverController? = {
        return PopoverController(nibName: "PopoverController", bundle: nil)
        }()
    
    @IBOutlet weak var window: NSWindow!

接着我们在window变量定义前面添加两个属性。就不解释了。

我们打算点击一个按钮,然后让这个popover窗口弹出来,再点击一个按钮,让这个popover窗口关闭。所以我么要在mainmenu.xib里面添加两个按钮。并建立相应的action。代码如下。

   @IBAction func ClosePopover(sender: AnyObject) {
       popover?.performClose(self)
    }
    @IBAction func DisplayPopover(sender: AnyObject) {
        
        if ( popover == nil ) {
            popover = NSPopover()
            
            self.window.contentView?.addSubview((poverController?.view)!)
            popover!.contentViewController = poverController
            
            let rc = NSMakeRect(40, 40, 100, 200)
            popover!.showRelativeToRect(
                rc, ofView: (poverController?.view)!, preferredEdge: NSRectEdge.MinY )
        }
        
    }

上面就是两个Action的代码。写这个文档之前,这些代码是测试过的,所以它能够工作。当你点击第一个按钮时候,会弹出popover窗口,点另一个时候popover窗口会消失。有点小问题,只能一次,第二次点击的时候,就没反应了。--嗯,但这不是问题。后面我还会继续研究,就这个话题继续下去,因为我可以确定这个东西会很有用。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值