Настоящий поповер из NSView - PullRequest
       5

Настоящий поповер из NSView

0 голосов
/ 21 сентября 2018

Я сделал пользовательский CustomView.xib.Он принадлежит CustomView.swift, который является подклассом NSView.Теперь я могу легко использовать CustomView внутри своей раскадровки, просто добавив NSView и установив его класс в CustomView.Проблема в том, что у меня есть кнопка внутри CustomView.xib, и я хочу представлять всплывающее окно MyPopoverViewController при каждом нажатии.Я погуглил и обнаружил, что для представления поповера мне нужно использовать метод вроде:

presentViewController(viewController: NSViewController, asPopoverRelativeTo: NSRect, of: NSView, preferredEdge: NSRectEdge, behavior: NSPopover.Behavior)

Проблема в том, что этот метод доступен только из NSViewController.Но у меня его нет.Я хочу, чтобы вызвать поповер изнутри NSView.Что мне теперь делать?Это должно быть возможно, потому что NSAlert работает везде и даже не принимает в качестве аргумента NSViewController.Таким образом, должен быть способ представить popover без какого-либо NSViewController.

1 Ответ

0 голосов
/ 21 сентября 2018

Это удобный метод для представления существующего контроллера представления как всплывающего окна.

Звучит так, как будто вы хотите создать и представить новый поповер.Для этого вам нужно создать объект NSPopover.Фактически это контроллер поповера.

Ваш NSPopover имеет свойство contentViewController: NSViewController, которое имеет свойство view: NSView.Это контроллер вида и вид, которые будут отображаться во всплывающем окне.

Как вы их создаете, зависит от вас.Вы можете создать их программно, но если это многократно используемое представление, встроенное в другие файлы пера / раскадровки, я бы предложил определить представление всплывающего окна и контроллер представления в его собственном файле пера, сделав объект NSPopover владельцем пера.Затем вы должны представить поповер так (написано в Safari):

let popover = NSPopover()
if Bundle.loadNibNamed(nibName: "MyViewPopover", owner: popover, topLevelObjects:nil) {
    ...
    popover.show(relativeTo: view.bounds, of: view, preferredEdge: NSRectEdgeMinX)
...