标签: appkit

检索所有已安装的 macOS 服务的列表?

如果您已经知道服务的名称,则可以以编程方式调用服务。据我了解,“服务”菜单是通过在每个已发布的服务上调用验证方法来构建的。

有没有办法在不使用服务用户对话框的情况下访问已安装服务的列表?

编辑:我不是指后台进程。我说的是 Finder 中“服务”菜单中的项目。概述它们在这里。

cocoa objective-c appkit swift3 macos-sierra

5
推荐指数
1
解决办法
519
查看次数

NSButton 不调用其操作

我对 NSButton 的操作遇到了一些麻烦。我以编程方式创建一个按钮...

let continueButton = NSButton(title: "Continue", target: self, action: #selector(self.continueButtonClicked))
Run Code Online (Sandbox Code Playgroud)

...调用此函数:

@objc func continueButtonClicked() {
    print("continueButtonClicked")
}
Run Code Online (Sandbox Code Playgroud)

但是,continueButtonClicked从未被调用并且该按钮似乎被禁用。我尝试启用它,但这并没有成功。

我错过了什么吗?

macos cocoa appkit nsbutton swift

5
推荐指数
1
解决办法
3326
查看次数

macOS Apple 帮助创作 - 锚点

我正在尝试为我准备发布的 macOS 应用程序制作一本 Apple 帮助手册。然而,我正在尝试让锚点在我的 HTML 中工作。根据苹果的定义:

“锚点允许您唯一地标识帮助书中的主题。当用户点击指向锚点的链接时,帮助查看器会加载包含该锚点的页面。...您还可以使用锚点从应用程序中加载锚定页面,方法是:调用 NHelpManager 方法 openHelpAnchor:inBook: ...”

苹果的例子:<a name="ArrivalTimesUsingStopID"></a>

在我的 Apple 中,我有一个 NSAlert,它具有以下代码来显示帮助按钮,以便当您单击它时,它会打开指定的锚字符串。

alert.showsHelp = true
alert.helpAnchor = NSHelpManager.AnchorName(stringLiteral: "ArrivalTimesUsingStopID")
Run Code Online (Sandbox Code Playgroud)

运行代码确实会显示帮助按钮,Mac 帮助也会打开,但出现错误,指出找不到指定的内容。不知道为什么锚点不起作用,因为如果我转到帮助菜单并从那里打开它,我可以访问帮助手册。

此外,苹果公司的文件指出:

NSAlert、SFChooseIdentityPanel、SFCertificatePanel 类提供对话框的帮助按钮。要显示此类帮助按钮并将其链接到帮助书中的锚点,请在这些类中使用 setShowsHelp: 和 setHelpAnchor: 方法。

以及这些属性的文档NSAlert

-setShowsHelp:YES 将帮助按钮添加到警报面板。当按下帮助按钮时,首先会咨询代表。如果委托未实现alertShowHelp:或返回NO,则使用nil book和-setHelpAnchor:指定的锚(如果有)调用-[NSHelpManager openHelpAnchor:inBook:]。如果委托返回 NO 并且没有设置帮助锚点,则会引发异常。

...所以我知道我正确使用了这两个。

我还了解到,每次更新 Apple 帮助手册 HTML 文档时都需要创建一个 .helpindex 文件。我正在使用“Help Indexer.app”,它位于developer.apple.com 上的其他Xcode 工具中。我确保:

  • 我可以选择设置索引所有锚点。
  • 任何带有锚点的 HTML 页面都位于<meta name="ROBOTS" content="ANCHORS">标头中,因此锚点会被索引。
  • 我的 Apple 帮助手册 plist 文件正确指向由“Help Indexer.app”创建的 .helpindex 文件。

但即使完成了所有这些,我仍无法将 Apple 帮助手册打开到正确的锚点,甚至无法打开 Apple 帮助手册的标题页。

我已阅读 https://developer.apple.com/library/archive/documentation/Carbon/Conceptual/ProvidingUserAssitAppleHelp/user_help_intro/user_assistance_intro.html#//apple_ref/doc/uid/TP30000903-CH204-CHDIDJFE

从头到尾多次,我无法找到解决方案或在线任何地方。 …

macos nsalert appkit apple-help

5
推荐指数
1
解决办法
712
查看次数

macOS:如何在没有停靠栏图标的情况下显示菜单栏主菜单

我有一个 macOS 应用程序,其菜单栏中有一个主菜单(不是 NSStatusItem)。我希望当应用程序的一个窗口聚焦时,该主菜单可见。但是,我不希望这个窗口有一个停靠图标。

当我将 LSUIElement 设置为 true 时,我注意到菜单栏永远不会出现。

我有一种感觉 LSUIElement 完全打破了菜单栏。是否有其他方法可以在没有停靠图标的情况下提供应用程序菜单栏菜单?

我是10.14.3。奇怪的是其他人似乎成功地在应用程序中创建了菜单栏。但无论我多少次聚焦我的应用程序,菜单栏都不会出现。

setActivationPolcy(...) 似乎完全阻止主菜单出现。LSUIElement 也不显示菜单。

macos cocoa appkit

5
推荐指数
0
解决办法
510
查看次数

我什么时候应该使用 NSURLCanonicalPathKey?

在 macOS 10.12 中,NSURLCanonicalPathKey被添加到NSURL. 文档指出:

\n\n
\n

URL 的路径作为规范的绝对文件系统路径。

\n
\n\n

除此之外,我看到的唯一其他文档/信息来自Swift 论坛帖子,其中指出:

\n\n
\n

您可能想查看 .canonicalPathKey (NSURLCanonicalPathKey)。在 Apple 平台上,许多标准 UNIXy 路径都存在于 /private/ 中,并具有来自根目录的相应符号链接。所以/etc/实际上是/private/etc/。如果您不\xe2\x80\x99t 规范化路径,您可能会因此而陷入困境。

\n
\n\n

这对我来说似乎是一件大事,但令我惊讶的是它只在 10.12 中引入。我曾经只依赖NSURLPathKey.path书签数据来解析 URL,但从来没有遇到过问题

\n\n
    \n
  • 我现在应该在以前使用过的所有地方都使用规范路径\n标准路径值吗?

  • \n
  • 如果我将路径信息作为字符串存储在数据库中,我应该存储.pathor的值吗NSURLCanonicalPathKey

  • \n
  • 如果我将 转换NSURL为字符串表示形式以在需要文件路径的 C/C++ 库中使用,我应该使用规范路径表示形式吗?

  • \n
  • 如果您要向用户显示文件的路径,是否应该显示规范路径?

  • \n
  • 与和NSURLCanonicalPathKey相比如何,它们似乎做了相同的事情或相反的事情......(?)URLByStandardizingPathURLByResolvingSymlinksInPath

  • \n
\n\n

这是在 macOS 10.14 上,我只考虑指向文件或文件夹的 URL。我知道书签数据可能应该存储在数据库中而不是路径中。

\n

url macos cocoa core-foundation appkit

5
推荐指数
1
解决办法
392
查看次数

带有图像和部分的 NSComboBox

如何制作一个带有部分和图标的NSComboBox,就像 Xcode 的图像选择器一样?带图像的组合框

macos cocoa appkit nscombobox

5
推荐指数
0
解决办法
214
查看次数

SwiftUI 按钮到选择器操作

我需要一个 SwiftUI 按钮在当前聚焦的组件上执行 Objective-C 选择器。以下作品:

\n\n
let button = Button(action: {\n  let command = #selector(NSStandardKeyBindingResponding.selectAll(_:))\n   NSApplication.shared.currentEvent?.window?.firstResponder?.doCommand(by: command)\n}, label: { Text("Select All") })\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\xa6但这显然真的很难看。SwiftUI 有一个Command可以包装 a 的结构Selector,但尚不清楚创建命令后如何实际调用选择器。

\n\n

Command按下按钮时发出任意指令的推荐方法是什么?

\n

appkit swiftui

5
推荐指数
1
解决办法
1835
查看次数

CGDisplayCreateImage仅返回壁纸和任务栏

我正在尝试从屏幕上获取显示器指定部分的像素颜色。我曾经CGDIsplayCreateImage(_:)这样做过,但由于某种原因,它没有创建当前打开的窗口的屏幕截图,而是只提供了壁纸和任务栏的图像。

为了可视化屏幕截图,我使用了 SwiftUI 视图。在我的应用程序中,我实际上不需要显示屏幕截图。

struct ScreenshotView: View {
    let cgImage: CGImage

    var body: some View {
        Image(decorative: cgImage, scale: 3)
    }
}
Run Code Online (Sandbox Code Playgroud)

这些applicationDidFinishLaunching(_:)方法看起来像这样。

func applicationDidFinishLaunching(_ aNotification: Notification) {

  let contentRect = NSRect(x: 0, y: 0, width: 240, height: 240)

  // Create the window and set the content view.
  window = NSWindow(
      contentRect: contentRect,
      styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
      backing: .buffered, defer: false)
  window.center()
  window.setFrameAutosaveName("Main Window")
  window.contentView = NSHostingView(rootView: ScreenshotView(cgImage: CGDisplayCreateImage(CGMainDisplayID())!))
  window.makeKeyAndOrderFront(nil)
}
Run Code Online (Sandbox Code Playgroud)

由于 XCode 和其他一些应用程序已打开,因此它应该为我提供所有打开的 …

xcode appkit swift

5
推荐指数
1
解决办法
1005
查看次数

如何防止 macOS 自动将 NSVisualEffectView 插入 NSScrollView

我通过将 a放入 aNSView以编程方式构建层次结构。我之前已经这样做过并且我的代码是正确的。NSStackViewNSScroller

视图层次结构是我所期望的,直到第一次通过运行循环(或显示)时,macOS Catalina(我认为是 Mojave)会自动将 a 插入NSVisualEffectView到视图层次结构中。这把我的自定义绘图弄乱了。

我创建的层次结构是

NSScrollView -> NSStackView -> stack subviews
Run Code Online (Sandbox Code Playgroud)

在第一个显示循环之前,滚动视图“丰富”了这一点:

NSScrollView -> NSClipView -> NSStackView -> stack subviews
Run Code Online (Sandbox Code Playgroud)

第一次显示后,NSVisualEffects View 被添加到与 NSClipView 相同的级别:

NSScrollView -> NSClipView          -> NSStackView -> stack subviews
             -> NSVisualEffectsView
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉滚动视图我不想要视觉效果视图?

任何帮助,将不胜感激!

macos cocoa appkit nsscrollview nsvisualeffectview

5
推荐指数
1
解决办法
696
查看次数

Xcode 中的“Container View 没有 IBSegueTriggerViewDidLoad 绑定”警告

当右键单击新 Xcode macOS 项目中添加的容器视图时,此警告在“触发的 Segues”部分下可见。这是什么意思?

在此输入图像描述

macos xcode cocoa appkit

5
推荐指数
0
解决办法
166
查看次数