我使用通知中心观察员检查NSTextView
NotificationCenter.default.addObserver(self, selector: #selector(testest), name: NSTextView.didEndEditingNotification, object: nil)
它有效,但问题是,我有两个nstextview并且它自动接收一个
即使我在obejct中指定了它的名字?那是为什么?
像这样 NotificationCenter.default.addObserver(self, selector: #selector(testest), name: NSTextView.didEndEditingNotification, object: BoxText)
更新:它在我的两个NSTextViews上都会选择如何指定一个?
答案 0 :(得分:0)
如果您传递nil,视图控制器中的所有NSTextView都将收到通知。只需为每个NSTextView创建一个IBOutlet,将通知对象强制转换为NSTextView,并检查它是否与每个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)
}
}