Вот трюк.Используйте необходимый метод делегата detachableWindowForPopover:
, чтобы выполнить работу за вас, например:
- (void) showPopoverDetached
{
NSWindow* detachedWindow = [self detachableWindowForPopover:nil];
[detachedWindow.windowController showWindow:nil];
}
Кажется, что инженеры Apple реализовали detachableWindowForPopover:
довольно умным способом, я думаю, он использует класс контроллера представления содержимого, и всегда будет создавать отдельный экземпляр отдельного окна.Как только detachableWindowForPopover:
вызвал, представленный экземпляр окна будет повторно использован независимо от того, когда и почему он вызывается, вызывается ли он напрямую (из функции, как в моем примере выше) или косвенно (например, когда вы перетаскиваете, отсоединяете, всплывающее окно отего исходное положение)
Таким образом, они могут предотвратить двойное отсоединение поповера, и мы также можем программно реализовать отсоединенный способ, отличная работа от них!