Swift: как определить, какой элемент управления был нажат при нажатии мыши - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь перехватить события нажатия мыши на некоторых элементах управления в окне приложения (Какао с раскадровками).

Если я переопределю mouseDown(with event: NSEvent) в своем классе ViewController, у меня возникают две проблемы:

  1. Невозможно (напрямую) определить, какой именно элемент управления в окне был нажат.Для этого я использую следующее:

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, мой переопределенный метод не вызывается.Почему?

1 Ответ

0 голосов
/ 06 мая 2019

Вы должны переопределить NSView mouseDown, а не NSViewController mouseDown.

...