swift - NSOpenPanel 无法获得焦点
问题描述
首先,我对 Swift 完全陌生,如果我的问题看起来微不足道,我很抱歉。
我想要一个非常简单的命令行程序,它打开一个对话框来选择文件或文件夹。此工具不能运行带有图标在 Dock 中弹跳的实际完整应用程序,而是一些微妙的东西。就是这样。我所做的正是这一点,除了小组无法获得焦点。当我单击面板时,它保持灰色。有趣的是,可以单击按钮或拖放文件,但无法浏览文件系统。键盘事件也不会被捕获。
import AppKit
let dialog = NSOpenPanel()
dialog.title = "Choose a .tif file or a folder";
dialog.showsResizeIndicator = true;
dialog.showsHiddenFiles = false;
dialog.canChooseDirectories = true;
dialog.canCreateDirectories = true;
dialog.allowsMultipleSelection = false;
dialog.allowedFileTypes = ["tif", "tiff"];
dialog.isFloatingPanel = true;
if (dialog.runModal() == NSApplication.ModalResponse.OK)
{
let result = dialog.url // Pathname of the file
if (result != nil)
{
let path = result!.path
print(path)
exit(0)
}
}
exit(1)
如何显示行为正常的 NSOpenPanel?即:可以获得焦点,可以与鼠标和键盘交互,...
解决方案
在这种情况下(没有窗口的应用程序),您需要将 NSApplication 激活策略设置.accessory
为激活面板(也有.regular
但它会显示 Dock 图标和菜单栏)。
import AppKit
NSApplication.shared.setActivationPolicy(.accessory)
let dialog = NSOpenPanel()
dialog.title = "Choose a .tif file or a folder"
dialog.showsResizeIndicator = true
dialog.showsHiddenFiles = false
dialog.canChooseDirectories = true
dialog.canCreateDirectories = true
dialog.allowsMultipleSelection = false
dialog.allowedFileTypes = ["tif", "tiff"]
dialog.isFloatingPanel = true
if (dialog.runModal() == NSApplication.ModalResponse.OK)
{
let result = dialog.url // Pathname of the file
if (result != nil)
{
let path = result!.path
print(path)
exit(0)
}
}
exit(1)
推荐阅读
- php - 如何将数组的值推送到laravel中自己的对象项中
- python - 我无法在 html 文件中传递动态数据
- javascript - How to send JSON object message to ActiveMQ using Node JS
- microsoft-teams - Using Microsoft Power Automate to post a reply in a Teams message that contains a particular keyword
- javascript - Object.defineProperty,从类中获取“this”,而不是“window”
- android - Android服务不绑定?
- leaflet - mapbox-gl-js addWaypoint 为什么会调用地图加载事件?
- sql - SQL插入反向对与连接表
- hsm - 在 THALES9000 中将 CVK 从 LMK 参考转换为 ZMK 参考
- java - log4j 不在硒中打印日志