亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Swift-從NSViewController捕獲keydown

Swift-從NSViewController捕獲keydown

繁星coding 2019-11-29 10:36:00
我想在我的小應用程序中捕獲關鍵事件。我做了什么:class ViewController : NSViewController {...  override func keyDown(theEvent: NSEvent) {        if theEvent.keyCode == 124 {            println("abc")        } else {            println("abcd")        }    }    override var acceptsFirstResponder: Bool {        return true    }    override func becomeFirstResponder() -> Bool {        return true    }    override func resignFirstResponder() -> Bool {        return true    }...}怎么了:按下鍵時,會播放Funk聲音效果。我看過很多帖子在談論如何,這是一個代表了屬于NSView和NSViewController不具有訪問權限。但是keydown函數override自動完成的類類型使NSViewController我相信這是錯誤的。
查看完整描述

3 回答

?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

迅捷4


剛剛找到了針對同一問題的解決方案Swift4。其背后的思想是:如果按下的鍵是由自定義邏輯處理的,則處理程序應返回nil,否則返回(未處理的)事件...


class MyViewController: NSViewController {

   override func viewDidLoad() {

      super.viewDidLoad()

      // ...

      NSEvent.addLocalMonitorForEvents(matching: .keyDown) {

         if self.myKeyDown(with: $0) {

            return nil

         } else {

            return $0

         }

      }

   }

   func myKeyDown(with event: NSEvent) -> Bool {

      // handle keyDown only if current window has focus, i.e. is keyWindow

      guard let locWindow = self.view.window,

         NSApplication.shared.keyWindow === locWindow else { return false }

      switch Int( event.keyCode) {

      case kVK_Escape:

         // do what you want to do at "Escape"

         return true

      default: 

         return false

      }

   }

}

我們在這里:按下鍵時沒有發出Purr / Funk聲音...


[更新]添加了對keyWindow的檢查。沒有這個,即使另一個視圖/窗口包含第一個響應者,也會觸發keyDown()。


查看完整回答
反對 回復 2019-11-29
?
holdtom

TA貢獻1805條經驗 獲得超10個贊

我正在嘗試為swift 3找到答案,這對我有用:


迅捷3

import Cocoa


// We subclass an NSView


class MainView: NSView {


    // Allow view to receive keypress (remove the purr sound)

    override var acceptsFirstResponder : Bool {

        return true

    }


    // Override the NSView keydown func to read keycode of pressed key

    override func keyDown(with theEvent: NSEvent) {

        Swift.print(theEvent.keyCode)

    }


查看完整回答
反對 回復 2019-11-29
  • 3 回答
  • 0 關注
  • 893 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號