NSPopover для запуска в отсоединенном состоянии - PullRequest
0 голосов
/ 26 июня 2018

Есть ли способ принудительно запустить NSPopover в отключенном состоянии?Я вижу только isDetached, которое является свойством только для чтения для состояния всплывающего окна, и метод NSPopoverDelegate detachableWindow(forPopover:), который позволяет мне переопределить созданное окно.Я хотел бы, по сути, нажать кнопку и запустить запуск NSPopover в состоянии на этой фотографии.

Стиль этого окна в точности соответствует требованиям к продукту, и я не могу найти какой-либо стиль NSWindow.настройки, которые заставляют окно делать что-то вроде этого (ни NSPanel)

Эта отдельная функциональность popover кажется особенной в том, что она:

  1. немодальная, но остается над основным приложением.Возможность по-прежнему взаимодействовать с основным приложением, как в сообщениях, как вы все еще можете щелкать и вводить новое сообщение.
  2. Щелкнув другое приложение, AppFoo, поместите и основное приложение, и вспомогательное окно за AppFoo.
  3. Вспомогательное окно можно перемещать, и оно не скрывается при деактивации приложения (выбирается другое приложение).
  4. В левом верхнем углу находится маленький, собственный серый X.

Detached NSPopover from Details button in Messages

1 Ответ

0 голосов
/ 03 декабря 2018

Вот трюк.Используйте необходимый метод делегата detachableWindowForPopover:, чтобы выполнить работу за вас, например:

- (void) showPopoverDetached
{
    NSWindow* detachedWindow = [self detachableWindowForPopover:nil];

    [detachedWindow.windowController showWindow:nil];
}

Кажется, что инженеры Apple реализовали detachableWindowForPopover: довольно умным способом, я думаю, он использует класс контроллера представления содержимого, и всегда будет создавать отдельный экземпляр отдельного окна.Как только detachableWindowForPopover: вызвал, представленный экземпляр окна будет повторно использован независимо от того, когда и почему он вызывается, вызывается ли он напрямую (из функции, как в моем примере выше) или косвенно (например, когда вы перетаскиваете, отсоединяете, всплывающее окно отего исходное положение)

Таким образом, они могут предотвратить двойное отсоединение поповера, и мы также можем программно реализовать отсоединенный способ, отличная работа от них!

...