2017-11-21 5 views
0

은 내가를 NSTextView알림 센터 관찰자는 늘 잘 작동

NotificationCenter.default.addObserver(self, selector: #selector(testest), name: NSTextView.didEndEditingNotification, object: nil) 

가 작동하지만 일이 내가 두를 NSTextView있어,이며이를 automaticly 하나에 집어을 확인하는 알림 센터 관찰자를 사용하고를 NSTextView을 확인

내가 obejct에서 이름을 지정할 때도 ?? 그게 왜? 이

NotificationCenter.default.addObserver(self, selector: #selector(testest), name: NSTextView.didEndEditingNotification, object: BoxText) 

업데이트 같은

: 그것은 acutlay 내가 어떻게 하나를 지정합니까 내 NSTextViews 모두에 집어?

+0

질문이 명확하지 않습니다. 객체를 지정하지 않으면 하나의 텍스트보기에서 알림을 받습니까? 어느 것? 객체를 지정할 때 두 텍스트보기 모두에서 알림을 받습니까? 델리게이트 메소드'textDidEndEditing (_ :)'이 있다는 것을 알고 계셨습니까? – Willeke

+0

그럼 두 개의 텍스트보기가 동일한 선택기에 연결되어 있어야하며 어느 텍스트보기를 호출하는지 알 수있는 방법이 필요합니까? –

+0

안녕하세요, 나는 똑같은 일을하고 싶지만 텍스트 대신 텍스트보기를 사용합니다. –

답변

0

Nil을 전달하면보기 컨트롤러에서 NSTextView가 알림을받습니다. 각 NSTextView에 대한 IBOutlet을 만들고 NSTextView에 알림 개체를 캐스팅하고 각 개체와 동일한 지 확인합니다. 특정 텍스트보기에서만 선택기를 실행하려면 개체 매개 변수로 전달해야합니다.

import Cocoa 

class ViewController: NSViewController { 

    @IBOutlet var textViewLeft: NSTextView! 
    @IBOutlet var textViewRight: NSTextView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // If you pass nil all NSTextView in your view controller will receive the notification 
     NotificationCenter.default.addObserver(self, selector: #selector(didEndEditing), name: NSTextView.didEndEditingNotification, object: nil) 
     // If you would like to have a selector to fire just for a certain text view you need to pass it as the object parameter 
     NotificationCenter.default.addObserver(self, selector: #selector(didEndEditingTextViewLeft), name: NSTextView.didEndEditingNotification, object: textViewLeft) 
     NotificationCenter.default.addObserver(self, selector: #selector(didEndEditingTextViewRight), name: NSTextView.didEndEditingNotification, object: textViewRight) 

    } 

    @objc func didEndEditing(_ obj: Notification) { 
     if (obj.object as? NSTextView) == textViewLeft { 
      print(#function, "textViewLeft") 
     } else if (obj.object as? NSTextView) == textViewRight { 
      print(#function,"textViewRight") 
     } 
    } 

    @objc func didEndEditingTextViewLeft(_ obj: Notification) { 
     print(#function) 
    } 

    @objc func didEndEditingTextViewRight(_ obj: Notification) { 
     print(#function) 
    } 
} 
+0

작동하지만 텍스트가 textview에서 변경되었을 때 작동하도록 didChangeTypingAttributesNotification을 사용해야했습니다. thx u –

+0

@Sarahlinone 대환영입니다. –