cocoa - NSPopover 自动关闭

标签 cocoa swift nspopover

我有一个带有我的 View 的 xib 和一个具有 transient 行为的 NSPopover:

IB nspopover setup

在 View Controller 中,我有一个操作来控制弹出窗口,如下所示:

    @IBAction func moreClicked(sender: NSButton) {      
    if !moreOpen  {
        moreOpen = true
        scriptsPopover.showRelativeToRect(sender.bounds, ofView: sender, preferredEdge: 2)
    } else {
        moreOpen = false
        scriptsPopover.close()
    }
}

当我单击按钮时,弹出窗口将按预期显示。但5秒后就消失了。

我希望弹出窗口显示多个按钮,并且仅当用户单击其中一个按钮或单击 UI 中的其他位置时才消失。像Interface Builder中的Autolayout Pin按钮举个例子。

我尝试将行为定义为 transient 、半 transient 、应用程序定义。所有这些都有完全相同的结果:几秒钟后它会自行消失。

我尝试实现 popoverShouldClose 委托(delegate)并返回 false 以让我控制它。它确实阻止了关闭,但是当用户单击按钮关闭时,它只是在旧弹出窗口之上打开一个弹出窗口。当我从 popoverShouldClose 返回 false 后,弹出窗口也会丢失箭头,这看起来很奇怪。

这是烦人的自动关闭的录音

NSpopover annnoyingly closes itself

最佳答案

调用 popoverShouldClose 方法时查看堆栈跟踪。您将在该堆栈跟踪中看到导致此问题的原因,并从那里尝试消除此原因。

我怀疑你的弹出窗口正在被释放,因为它没有被你牢牢地持有。

关于cocoa - NSPopover 自动关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29881842/

相关文章:

ios - 核心数据 : Segue to detail controller with newly created ManagedObject

javascript - 为什么没有在 ns-popover 弹出窗口中选择 radio 。仅在表格最后一列弹出窗口中选择单选

objective-c - 在 NSStatusItem 上实现 NSPopover

cocoa - 创建类似 NSPopOver 的动画

objective-c - 创建 Quartz Composer 风格的界面

swift - Realm 列表过滤器 Swift

objective-c - 核心数据 : Abstract Entity in Fetch Request

ios - MFMailComposeViewController 返回和发送按钮不起作用

objective-c - NS_DESIGNATED_INITIALIZER 预期为 : (colon)

xcode - 基于文档的应用程序示例