我有一个自定义控件。如果它继承自NSView
,当我点击它时它会自动成为第一响应者。如果它继承自NSControl
,则不会。这种行为差异仍然存在,即使我覆盖mouseDown(with:)
并且不调用 super。
代码:
class MyControl: NSView {
override var canBecomeKeyView: Bool { return true }
override var acceptsFirstResponder: Bool { return true }
override func drawFocusRingMask() { bounds.fill() }
override var focusRingMaskBounds: NSRect { return bounds }
override func draw(_ dirtyRect: NSRect) {
NSColor.white.set()
bounds.fill()
}
}
如您所见,我acceptsFirstResponder
在与键视图和响应程序相关的其他方法和属性中进行了覆盖。我也检查了refusesFirstResponder
财产。它设置为假。
- 这种行为差异的原因是什么?
- 是否有我可以覆盖以影响它的方法或属性?
- 假设我想要单击时视图成为第一响应者并且视图继承自的行为,在我的鼠标按下事件处理程序的开头
NSControl
调用是window!.makeFirstResponder(self)
一个好的解决方案还是有更好的解决方案?