Ищете пример того, как программно отображать текст в NSWindow? - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь отобразить текст в полупрозрачном окне в стиле HUD. У меня есть код для всего окна, но я уже два дня обыскиваю документы и не нашел способа, который действительно отображал бы текст в окне. Поскольку я использую AppleScriptObjC в отладчике сценариев, а не Xcode, я бы предпочел сделать это программно и не должен переключаться на Xcode и использовать IB. (Я потратил некоторое время на игры с IB, но, если честно, это не очень интуитивно понятно. Поэтому я решил проверить эту форму, прежде чем изучать руководства о том, как начать использовать IB).

Итак, мне дали совет: «создать NSTextField и добавить его в contentView вашего окна». Поэтому я попробовал множество различных способов инициации NSTextField (и NSTextView), и, возможно, мне удалось исправить эту часть, но получение текста, отображаемого в окне, оказалось более сложной задачей, чем я ожидал. Я включил фрагмент кода, который я использую для создания окна.

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

Я надеюсь, что смогу получить NSText View в этом окне, чтобы отобразить в нем некоторый текст. До сих пор я не подошел близко. Обычно я получаю сообщения об «нераспознанном селекторе, отправленном экземпляру». Так что совершенно очевидно, что я делаю что-то не так. Я надеюсь, что есть простой способ сделать это, с которым я еще не сталкивался.

1 Ответ

1 голос
/ 28 мая 2019

Похоже, что для некоторых методов нет цели. В операторе tell обычно подразумевается цель, но иногда AppleScript не может понять это. Вы также не получите синтаксис более нового метода, поэтому мне повезло, просто указав цель для всего - также обратите внимание, что свойства объекта обычно можно устанавливать напрямую, а не с помощью их метода установки.

Я не могу сказать из вашего фрагмента, но вам также нужно добавить textView в 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|()
...