Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSTextField(cocoa)的轨迹选择范围更改_Objective C_Xcode_Cocoa_Selection - Fatal编程技术网

Objective c NSTextField(cocoa)的轨迹选择范围更改

Objective c NSTextField(cocoa)的轨迹选择范围更改,objective-c,xcode,cocoa,selection,Objective C,Xcode,Cocoa,Selection,有人知道我如何跟踪NSTextField.currentEditor.selectedRange对NSTextField的值更改吗 有一个奇妙的东西NSTextView didchangeselectionnotification,它完全满足了我的需要,但它只适用于NSTextView 我试着玩KVC/KVO,但我没有得到我想要的。我想我做错了什么 我将努力解释我需要实现的目标 我有NSTextField,下面我有一个标签,我想把上面文本选择的NSTextField.currentEditor.

有人知道我如何跟踪
NSTextField.currentEditor.selectedRange
NSTextField
的值更改吗

有一个奇妙的东西
NSTextView didchangeselectionnotification
,它完全满足了我的需要,但它只适用于
NSTextView

我试着玩KVC/KVO,但我没有得到我想要的。我想我做错了什么

我将努力解释我需要实现的目标


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

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

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

但是我找不到退订的好地方,因为文本字段只有一瞬间的键盘焦点,然后在创建并激活字段编辑器NSTextView时丢失


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

您可以在
NSWindow
委托上实现
-windowWillReturnFieldEditor:toObject:
,并为您关心的控件返回不同的字段编辑器,可能只为该字段编辑器设置了相关的
NSTextView
通知。当然,您也可以返回自己的
NSTextView
子类,尽管这在这里可能是不必要的。

如中所述,“字段编辑器”将当前文本字段指定为其委托。由于字段编辑器是一个实例,我们可以在
NSTextField
子类中实现任何方法

- (void)textViewDidChangeSelection:(NSNotification *)notification
{
  NSRange selection = self.currentEditor.selectedRange;
  NSLog(@"selection = (location: %lu, length: %lu)", selection.location, selection.length);
}

享受吧!✌️

controlTextDidBeginEditing:
方法在进行更改后被调用,文档在这里提到: