2016-08-31 24 views
0

私はMacOSのSwiftにコードを書いています(私はUIKitではなくAppKitを使用しています)。 編集できないNSTextViewがあります。 端末の種類をエミュレートしたい。 以下のコードは、ユーザーがRETURNキーを押して ">> \ n"を印刷したときにわかります。私は、対応するキーを書くために、ユーザーがいずれかのキーを押したときに通知を受けることができるようにしたいと考えています。たとえば、ユーザーがBACKSPACEを押すと、 ">>"を削除しない限り、NSTextViewから1文字を削除します。NSTextViewのキー押下イベント(macOS)

これはコードです。 輸入ココア

class ViewController: NSViewController { 
    @IBOutlet var console: Console! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     console.parent = self 
     } 

     func newLine() { 
      let textStorage = console.textStorage 
      if(textStorage != nil) { 
       let myString = "\n>>" 
       let myAttribute = [ NSForegroundColorAttributeName: NSColor.greenColor(), NSFontAttributeName: NSFont(name: "Menlo Regular", size: 13.0)! ] 
       let myAttrString = NSAttributedString(string: myString, attributes: myAttribute) 

       textStorage!.appendAttributedString(myAttrString) 
       let length = console.string!.characters.count 

       console.setSelectedRange(NSRange(location: length,length: 0)) 
       console.scrollRangeToVisible(NSRange(location: length,length: 0)) 
      } 
     } 

    override var representedObject: AnyObject? { 
     didSet { 
     // Update the view, if already loaded. 
     } 
    } 
} 

class Console : NSTextView { 
    var parent: ViewController? 
    override func insertNewline(sender: AnyObject?) { 
     parent!.newLine() 
    } 

    override func controlTextDidBeginEditing(obj: NSNotification) { 
     NSLog("wow") //unfortunately this method is never called, even setting the NSTextView as Editable 
    } 
} 

関連質問:How to capture user input in real time in NSTextField?

答えて

1

あなたはNSTextViewのkeyDown(with event: NSEvent)一般用のキーを押して上書きすることができます。 event.charactersIgnoringModifiersまたはevent.modifierFlagsをチェックして、どのキーが押されたかを確認します。

+0

ありがとうございます、これを試してみます – Nisba

+0

完全に動作しています – Nisba

関連する問題