NSTextField(可可)的跟踪选择范围更改

Thi*_*mus 5 xcode cocoa objective-c selection

有谁知道如何跟踪NSTextField.currentEditor.selectedRange价值变化NSTextField

有这个奇妙的东西NSTextViewDidChangeSelectionNotification,它完全符合我的需要,但它只适用于NSTextView.

我试过和KVC/KVO玩,但我得不到我想要的东西.我认为我做错了什么.

我将尝试解释我需要实现的目标.

我有NSTextField,下面我有一个标签,我想从NSTextField.currentEditor.selectedRange上面的文本选择中放置值.实时,即我想NSTextField.currentEditor.selectedRange在选择文本区域的同时连续更新我的标签内容,选择长度和起始位置.

uli*_*ess 1

NSTextField使用当前窗口的字段编辑器进行实际的文本编辑,这是一个NSTextView. 要订阅NSTextViewDidChangeSelectionNotification该文本视图,您需要找出您的字段何时获得键盘焦点,然后向其询问currentEditor

遗憾的是,它似乎controlTextDidBeginEditing:从未被调用,但您可以重写becomeFirstResponder以获得相同的效果(请务必调用 super)。

不过,我找不到取消订阅的好地方,因为文本字段只有一瞬间的键盘焦点,然后在创建并激活字段编辑器 NSTextView 时失去它。

所以最后,我要做的是nil在创建视图时使用对象订阅通知,在 dealloc 中取消订阅,并检查notification.object == self.currentEditor通知处理程序中是否存在并忽略所有其他处理程序。