您的问题可能是您从未真正将控件设置为第一响应者。只需点击它不会自动执行。下面是接受第一响应者状态的一个简单例子(并且也是如此点击),并绘制一个聚焦环。确保启用该控件并设置其目标和操作。
class MyControl: NSControl {
override var acceptsFirstResponder: Bool {
return true
}
override func becomeFirstResponder() -> Bool {
return true
}
override func mouseDown(with event: NSEvent) {
window?.makeFirstResponder(self)
}
override func mouseUp(with event: NSEvent) {
if let action = action {
NSApp.sendAction(action, to: target, from: self)
}
}
override func draw(_ dirtyRect: NSRect) {
NSColor.white.set()
NSBezierPath(roundedRect: bounds.insetBy(dx: 1, dy: 1), xRadius: 3, yRadius: 3).fill()
if window?.firstResponder == self {
NSColor.keyboardFocusIndicatorColor.set()
} else {
NSColor.black.set()
}
NSBezierPath(roundedRect: bounds.insetBy(dx: 1, dy: 1), xRadius: 3, yRadius: 3).stroke()
}
override var focusRingMaskBounds: NSRect {
return bounds.insetBy(dx: 1, dy: 1)
}
override func drawFocusRingMask() {
NSBezierPath(roundedRect: bounds.insetBy(dx: 1, dy: 1), xRadius: 3, yRadius: 3).fill()
}
}
你有没有搞清楚?我正试图处理同样的事情。谢谢。 – pizzafilms 2015-03-30 21:24:54
不,从来没有 - 我把它放在一边去处理别的事情,还没有回到它。 – starkos 2015-03-31 14:38:40
你可以请出示一些代码吗? – rocky 2016-03-07 23:29:17