Ответ 1
Вероятно, ваша проблема заключалась в том, что вы никогда не устанавливали контроль в качестве первого ответчика. Просто щелчок по нему не будет делать это автоматически. Ниже приведен краткий пример, который принимает статус первого ответчика (и становится таким же нажатием), и рисует кольцо фокусировки. Обязательно включите управление и установите его цель и действие.
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()
}
}