Я пытаюсь перехватить события нажатия мыши на некоторых элементах управления в окне приложения (Какао с раскадровками).
Если я переопределю mouseDown(with event: NSEvent)
в своем классе ViewController
, у меня возникают две проблемы:
- Невозможно (напрямую) определить, какой именно элемент управления в окне был нажат.Для этого я использую следующее:
Swift 4:
override func mouseDown(with event: NSEvent)
{
let point: NSPoint = event.locationInWindow
let view: NSView = self.view.hitTest(point)!
if type(of:view) == NSTextField.self // with tags is also fine
{
// do something with the control (in the example NSTextField)
// (view as! NSTextField).backgroundColor = NSColor.systemPink
}
}
Я немного озадачен, почему для такой основной операции с графическим интерфейсомСуществует не «родной» обработчик событий, как предусмотрено для щелчка мышью (путем создания @IBAction
).Я что-то упустил, или это способ ловить события мыши и обрабатывать их?
Для некоторых элементов управления, например
NSLevelIndicator
, мой переопределенный метод не вызывается.Почему?