我在macOS项目中编程。
在我的项目中,有一个tableview。单击tableview单元格时,将显示一个弹出窗口。
但我发现在显示弹出框后,窗口的firstResponder
仍然是我的桌面视图。还有什么,当我明确地打电话:
window?.makeFirstResponder(popover) //window is not nil.
在这行代码之后,popover将成为第一响应者,但几乎立即辞职第一响应者。而tableview再次成为第一响应者。
我只想在第一个响应者辞职时关闭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)
}