Сделать NSPanel всегда сверху

Я делаю мост для react-native-macos. Мне нужен NSPanel с тем же поведением, что и Spotlight. Программно создал, но есть вопросы:

  1. Не могу сделать его всегда сверху (также должно работать, если приложение скрыто)
  2. Внутри панели есть NSTextField. Если я попытаюсь скрыть панель заголовка, я не смогу изменить поле. Вроде отключил.
  3. Как лучше отображать результаты (например, в центре внимания)
private var panel = NSPanel()
private var textField = NSTextField(frame: NSMakeRect(0,0,400,40))

var frame: NSRect = CGRect(x: 0, y: 0, width: 400, height: 40)
frame.size = NSSize(width: 400, height: 60)
panel.setFrame(frame, display: true)
  
let view: NSView = NSView(frame: frame)
    
myTextField.stringValue = "Some text"
myTextField.isEnabled = true
myTextField.font = NSFont.systemFont(ofSize: 28)
    
view.addSubview(myTextField)

panel.contentView?.addSubview(view)

panel.makeKeyAndOrderFront(panel)
panel.center()

person Denis    schedule 23.07.2020    source источник


Ответы (2)


Сделать его плавающим

panel.isFloatingPanel = true           // << this one !!
panel.makeKeyAndOrderFront(panel)
panel.center()
person Asperi    schedule 23.07.2020
comment
Я нашел решение здесь плавать над полноэкранными приложениями"> stackoverflow.com/questions/36205834/ Но все еще есть вторая проблема. Невозможно изменить текстовое поле, если панель не имеет заголовка - person Denis; 23.07.2020
comment
Все окна приложений удаляются с экрана, когда приложение скрыто. Тогда вам нужна не панель, а другое приложение, именованный агент приложения и пользовательское окно с высоким уровнем окна. Для начала прочитайте, например, эту статью. - person Asperi; 23.07.2020

Это работает для меня

panel.level = .mainMenu
person Denis    schedule 25.07.2020