- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在编写一个 Mac 应用程序,它是菜单栏右侧的 NSPopover
(Application is agent(UIElement)
设置为 YES
)。我允许用户通过单击并向下拖动来分离弹出窗口,这会将应用程序置于窗口内。这工作正常;但是,当应用程序被拖出菜单栏并进入窗口时,我希望我的应用程序的图标出现在停靠栏中,并在菜单栏的左侧显示特定于应用程序的菜单,就好像Application is agent(UIElement)
设置为 NO
。相反,当窗口关闭并且应用程序返回到菜单栏中的弹出窗口时,我希望我的应用程序图标从停靠栏中消失并且不再在菜单栏左侧显示特定于应用程序的菜单(Application is agent(UIElement)
设置回 YES
)。
来自 this question ,我知道在运行时更改 Application is agent(UIElement)
是不可能的。然而,给出的答案是在 Objective-C 中,最后一个函数似乎从 OS X 10.9 开始贬值。如何使我的应用程序具有与使用 Swift 在运行时更改 Application is agent(UIElement)
相同的行为?
我知道显示应用程序图标/菜单栏菜单会在 windowDidBecomeMain
中发生,隐藏应用程序图标/菜单栏菜单会在 windowWillClose
中发生。
谢谢。
最佳答案
经过反复试验,我终于弄明白了。您不使用 Application is agent(UIElement)
,而是使用 NSApp.setActivationPolicy
。现在这是我的代码。在 App Delegate 中:
var isWindow = false
class AppDelegate: NSObject, NSApplicationDelegate, NSPopoverDelegate {
let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength)
let popover = NSPopover()
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Insert code here to initialize your application
NSApp.setActivationPolicy(.accessory)
if let button = statusItem.button {
button.image = NSImage(named: "StatusBarImage")
button.action = #selector(togglePopover(_:))
}
popover.contentViewController = MainViewController.loadController()
popover.delegate = self
popover.animates = false
popover.behavior = .transient
}
@objc func togglePopover(_ sender: Any?) {
if popover.isShown == true {
popover.performClose(sender)
} else if detachedWindowController.window!.isVisible {
detachedWindowController.window?.setIsVisible(false)
isWindow = true
} else if isWindow == true {
detachedWindowController.window?.setIsVisible(true)
} else {
if let button = statusItem.button {
popover.show(relativeTo: button.bounds, of: button, preferredEdge: NSRectEdge.minY)
}
}
}
lazy var detachedWindowController: DetachedWindowController = {
let detachedWindowController = DetachedWindowController(windowNibName: "DetachedWindowController")
detachedWindowController.contentViewController = MainViewController.loadController()
return detachedWindowController
}()
func popoverShouldDetach(_ popover: NSPopover) -> Bool {
return true
}
func detachableWindow(for popover: NSPopover) -> NSWindow? {
return detachedWindowController.window
}
}
在 DetachedWindowController
中:
class DetachedWindowController: NSWindowController, NSWindowDelegate {
@IBOutlet var detachedWindow: NSWindow!
override func windowDidLoad() {
super.windowDidLoad()
detachedWindow.delegate = self
}
func windowWillClose(_ notification: Notification) {
isWindow = false
NSApp.setActivationPolicy(.accessory)
}
func windowDidBecomeMain(_ notification: Notification) {
if NSApp.activationPolicy() == .accessory {
NSApp.setActivationPolicy(.regular)
}
}
}
关于swift - 如何让我的应用程序表现得像我在运行时使用 Swift 更改 Application is agent(UIElement)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51036106/
功能介绍 agent.exe程序文件是一个类似Windows更新服务(wuauclt.exe,即Windows Update)的程序,它不是Windows系统的一部分。而是第三方软件公司发布的程序
我正在尝试查找 android 应用程序的用户代理。 该应用程序允许应用程序内浏览,所以我认为它必须有一个用于浏览的用户代理。 我怎么知道那是什么?我正在尝试使用该信息来运行该网站的桌面版本,使其看起
考虑以下代码: (let [slave-agent (agent 0) run-slave (fn [_] (println "running slave agent")) run-m
我最近遇到了“多代理计算”这个术语,但我不太明白它是什么。我读过一本关于它的书,但这并没有回答代理是什么的基本问题。 是否有人有指向一些引用的指针,该引用清晰简洁,并且在没有大量废话/营销言论的情况下
我有一个 java 代理,我可以从它调用另一个代理,通过它传递包含 NoteId 的参数,并使用该 NoteId,我能够成功地完成该文档的工作。直到这里一切都清楚了. 关于此的主要问题是,是否可以从当
SQL Server 2012 SP2 CU6 v-5592 我启动 SQL 服务和 SQL 代理服务;都开始OK。然后我在 Windows 2012 Ent(不是 R2)服务器上登录 SSMS,SQ
有一个应用程序我曾经在 Mozilla 中运行,但我决定使用 Chrome。我选择了BlahBlahBlahSafari.gwt.xml (包含 )在 Google/GWT Compile 的帮助下
这与我的第一个问题有关。我更新了所有代码。在我的 bot.js是: require('dotenv').config(); let ver = process.env.DISCORD_BOT; cli
在 OPA 中,很清楚如何查询 condition AND condition : values := { "value1": { "a": "one" }, "value2":
通过 User-Agent header 检测设备是否为 SmartTV 设备的任何常用方法/模式?可能正在搜索 TV 或其他内容? 请告知还有其他值得检测的电视相关平台吗? UPD:根据这个http
这就是我跑步时它返回给我的东西。我试图更新包,但仍然不起作用。我也试过重新安装Julia,这个包在重新安装后只会运行一次。然后我第二次跑步的时候。它将再次失败。我试着修复它已经很长时间了。。有人能帮我
我是 OPA(开放策略代理)的新手,正在尝试使用 REST API/v1/policies/{id} 创建新策略。有用!但是,OPA 服务器将其保存到内存中,并且在重新启动后我的所有策略都被删除了。我
我想在 K8sPSPCapabilities 约束模板中将一个容器列入白名单,但我在使用 rego 语言时遇到了一些困难。我想禁止除特定容器之外的所有容器的 NET_RAW 功能。如果有人能指出我正确
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
导入命令: “从rasa_core.agent导入代理” 给我以下错误 ----------------------------------------------------------------
我正在为 Eclipse Kepler 开发一个插件。将 @RunWith(JMockit.class) 添加到我的测试类会导致以下错误: JMockit: Reinitializing un
如何使用TD-AGENT-BIT将日志文件作为消息输出,可以是逐行输出,也可以是以“hh:mm:ss”开头的行输出,然后向下游发送,而不是每次一起输出多行日志?日志:。。。我想要下面这样的消息:。。。
我在 SQL Server 上有一个非常奇怪的情况,我无法理解。 环境:SQL Server 2012 SP3 CU3 在 2 节点 Windows 2008 R2 集群上运行 在 SQL Serve
有关该主题的所有其他问题都没有解决我的问题。 注入(inject)器: VirtualMachine vm = VirtualMachine.attach(pid); vm.loadAgent(new
[SSH]“无法打开与您的身份验证代理的连接”。错误 我正在尝试将 ssh key 添加到我的 ssh 代理中。我首先确保 ssh-agent 正在运行。 exec ssh-agent bash 我确
我是一名优秀的程序员,十分优秀!