2017-11-03 1 views
0

にこのコードを確認のNSWindowControllerのサブクラス内にある:現在選択されているテキスト

@objc func textViewDidChangeSelection(_ notification: Notification) { 
    // Show the previous (not current) selection range 
    if let stuff = notification.userInfo { 
     var i = 0 
     for (key, value) in stuff { 
      print("\(i) key=\(key) value=\(value)") 
      i += 1 
     } 
    } 
} 

override func windowWillLoad() { 
    NotificationCenter.default.addObserver(self, 
     selector: #selector(self.textViewDidChangeSelection(_:)), 
     name: NSTextView.didChangeSelectionNotification, 
     object: nil) 
} 

通知内の2つの辞書エントリの値は、以前のテキストの選択に対応する範囲を提供します。通知が発行されたときの現在のテキスト選択を知るには?

+0

また、NSTextFieldが複数ある場合、どの通知が開始されたかを知る方法は? – Aarhus88

答えて

0

テキストビュー(NSTextView)が通知のオブジェクトです。テキストフィールドは、テキストビューのデリゲートです。

+0

ありがとうございます。しかし、この通知がNSTextFieldの前の(現在ではない)選択範囲についての情報しか提供しないのは本当に奇妙です。それは1つの選択ステップです。私はAppleがなぜこのように設定するのか理解していない。 – Aarhus88

+0

テキストビューから現在の選択を取得できます。 – Willeke

0

「ノート」はNSTextFieldである場合、これは、現在の選択範囲を提供します:使用可能なドキュメントを経由して、これを発見する

 if let sr = notes.currentEditor()?.selectedRange { 
      Swift.print("sr = \(sr.location) \(sr.length)") 
     } 

非常に困難に。

+0

'textViewDidChangeSelection'では、' notification.object'はテキストビューです。 – Willeke

関連する問題