为什么我的NSPopover不会成为第一响应者?

时间:2017-07-06 07:17:40

标签: swift macos cocoa nstableview nspopover

我在macOS项目中编程。

在我的项目中,有一个tableview。单击tableview单元格时,将显示一个弹出窗口。

但我发现在显示弹出框后,窗口的firstResponder仍然是我的桌面视图。还有什么,当我明确地打电话:

 window?.makeFirstResponder(popover) //window is not nil.

在这行代码之后,popover将成为第一响应者,但几乎立即辞职第一响应者。而tableview再次成为第一响应者。

enter image description here

我只想在第一个响应者辞职时关闭popover,但我不知道为什么它在显示时不能成为第一响应者。

-

修改

创建popover的代码:

//In tablecellview's subview
let popover = NSPopover()

required init?(coder: NSCoder) {
    super.init(coder: coder)
    ...

    let controller = NSStoryboard(name: "Main", bundle: nil).instantiateController(withIdentifier: "popover") as! ColorSelectionPopoverVC
    controller.selectionDelegate = self
    popover.contentViewController = controller
}

override func mouseDown(with event: NSEvent) {
    if !disablePopover && !popover.isShown {
        popover.show(relativeTo: self.bounds, of: self, preferredEdge: .maxX)            
    }
// The following line can let popover'contentVC become first responder for a while. 
//        window?.makeFirstResponder(popover.contentViewController)

    super.mouseDown(with: event)

}

0 个答案:

没有答案