首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSPopover未关闭

NSPopover未关闭
EN

Stack Overflow用户
提问于 2015-04-14 02:38:04
回答 5查看 1.6K关注 0票数 2

我正在努力使,如果用户点击菜单图标,以显示弹出关闭,如果用户点击任何地方,但弹出关闭。我将行为设置为瞬态,但这并不是我想的那样。

现在,如果用户单击弹出窗口上的某个位置,将焦点带到该弹出窗口上,则用户可以单击屏幕上的其他位置,弹出窗口将关闭。如果我可以强制将焦点放在popover上,我想这也可以解决我的问题。不幸的是,我也不知道该怎么做。

代码语言:javascript
复制
class AppDelegate: NSObject, NSApplicationDelegate {

    let view : NSView!
    let statusItem: NSStatusItem
    let popover: NSPopover
    let button : NSButton!

    override init() {

        statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-1)
        if let statusButton = statusItem.button {
            appStatusButton = statusButton
            statusButton.image = NSImage(named: "icon128off")
            statusButton.alternateImage = NSImage(named: "icon128")
            statusButton.action = "onPress:"
        }

        popover = NSPopover()
        popover.animates = false
        popover.contentViewController = ViewController()
        popover.behavior = .Transient
    }


}

这是视图控制器

代码语言:javascript
复制
class ViewController: NSViewController, WKNavigationDelegate{

   var webView : WKWebView!

   override func loadView() {
      view = NSView()
      view.translatesAutoresizingMaskIntoConstraints = false
      view.addConstraint(NSLayoutConstraint(
        item: view, attribute: .Width, relatedBy: .Equal,
        toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 580))
      view.addConstraint(NSLayoutConstraint(
        item: view, attribute: .Height, relatedBy: .Equal,
        toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 425))

    }
}
EN

回答 5

Stack Overflow用户

发布于 2015-04-14 20:40:40

Swift 5:

代码语言:javascript
复制
NSApplication.shared.activate(ignoringOtherApps: true)

在打开弹出窗口之前添加此内容

代码语言:javascript
复制
NSApplication.sharedApplication().activateIgnoringOtherApps(true)

感谢this guy!

票数 6
EN

Stack Overflow用户

发布于 2020-01-06 01:46:18

Swift 5.1

问题是弹出窗口没有变成key,要解决这个问题,只需在显示之后强制它变成key即可。例如,假设pop是一个NSPopOver

代码语言:javascript
复制
pop.show(relativeTo: button.bounds, of: button, preferredEdge: .minY)
pop.contentViewController?.view.window?.makeKey()
票数 5
EN

Stack Overflow用户

发布于 2020-12-23 01:02:43

我也遇到过同样的问题,没有一个答案对我有效。但我尝试了下面显示的组合,这是完美无瑕的

代码语言:javascript
复制
        self.popover.behavior = NSPopover.Behavior.transient
        NSApp.activate(ignoringOtherApps: true)
        self.popover.show(relativeTo: button.bounds, of: button, preferredEdge: NSRectEdge.minY)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29612628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档