寻找如何以编程方式在 NSWindow 中显示文本的示例?

Looking for example of how to display text in an NSWindow programmatically?

我正在尝试以半透明的 HUD 样式显示文本 window。我已经设置好 window 的代码,但我已经搜索了两天的文档,还没有想出一种在 window 中实际显示文本的方法。由于我在脚本调试器中使用 AppleScriptObjC,而不是 Xcode,我宁愿以编程方式执行此操作,而不必切换到 Xcode 并使用 IB。 (我确实花了一些时间来研究 IB,但老实说它不是很直观。所以我想在阅读有关如何开始使用 IB 的指南之前,我会检查此表格)。

所以 "create an NSTextField and add it to your window's contentView" 给了我一些建议。因此,我尝试了许多不同的设置来尝试初始化 NSTextField(和 NSTextView),并且我可能已经能够使该部分正确,但是让文本实际显示在 window 中是一个更大的挑战超出我的预期。我已经包含了我用来生成 window.

的代码的代码片段
tell (NSWindow's alloc()'s ¬
            initWithContentRect:{{theWidth, theHeight}, {640, 480}} ¬
                styleMask:NSBorderlessWindowMask ¬
                backing:NSBackingStoreBuffered ¬
                defer:true)

            setOpaque_(yes)
            setAlphaValue_(0.5)
            setBackgroundColor_(NSColor's grayColor())
            setReleasedWhenClosed_(yes)
            setExcludedFromWindowsMenu_(yes)
            orderFrontRegardless()
            delay 1
            |close|()
        end tell

我希望能够在 Window 中获得一个 NSText 视图,以便在其中显示一些文本。到目前为止,我还没有接近。我通常得到的错误大约是 "unrecognized selector sent to instance"。所以很明显我做错了什么。我希望有一个我还没有遇到过的简单方法来完成这个。

听起来有些方法没有目标。在 tell 语句中,目标通常是隐含的,但有时 AppleScript 无法弄清楚。你也没有得到更新的方法语法,所以我运气更好只是为所有内容指定目标 - 还要注意通常可以直接设置对象属性而不是使用他们的 setter 方法。

我无法从你的代码片段中看出,但你还需要将 textView 添加到 window 的 contentView,例如:

use AppleScript version "2.4" -- Yosemite (10.10) or later
use framework "Foundation"
use scripting additions

# create a text view
tell (current application's NSTextView's alloc's initWithFrame:{{20, 20}, {600, 440}})
  set theTextView to it
end tell

# create a window
tell (current application's NSWindow's alloc()'s ¬
    initWithContentRect:{{200, 600}, {640, 480}} ¬
    styleMask:(current application's NSBorderlessWindowMask) ¬
    backing:(current application's NSBackingStoreBuffered) ¬
    defer:true)
  set theWindow to it
  set its opaque to true
  set its alphaValue to 0.5
  set its backgroundColor to (current application's NSColor's grayColor)
  set its releasedWhenClosed to true
  set its excludedFromWindowsMenu to true
end tell

theWindow's contentView's addSubview:theTextView
theTextView's setString:"this is a test"
theWindow's orderFrontRegardless()
delay 5
theWindow's |close|()