以编程方式取消选择NSTextView中的文本?

Jus*_*tin 6 cocoa nstextview appkit

我正在使用以下代码取消选择NSTextView,如此处所示.不幸的是,什么也没发生.我已经尝试了我所知道的调试它,但一切似乎都正常工作,但它不会影响NSTextView.

代码:

// Sets the scrolling bounds and behavior. This might be useful, but I don't know
[[textView textContainer] setContainerSize:NSMakeSize(FLT_MAX, FLT_MAX)];
[[textView textContainer] setWidthTracksTextView:FALSE];

// The code for deselecting, beginning by making sure it is actually selected (for testing only, as strange as it is)

[textView setSelectable:TRUE];
[textView setDelegate:self];
[_window makeFirstResponder:textView];

NSText *fieldEditor = [_window fieldEditor:TRUE forObject:textView];
[fieldEditor setSelectedRange:NSMakeRange([[fieldEditor string] length],0)];
[fieldEditor setNeedsDisplay:YES];
Run Code Online (Sandbox Code Playgroud)

关于为什么这不起作用的任何想法?我确信我的插座设置正确,因为我可以操纵其他东西,比如它的字符串值.

Fra*_*rew 8

我不确定NSTextViews是否使用字段编辑器,您是否尝试直接在文本视图上调用该方法?

[textView setSelectedRange:NSMakeRange(textView.string.length, 0)];
Run Code Online (Sandbox Code Playgroud)

例如,可以调整范围位置以将光标移动到开始或结束.在调用此方法之前,您可能还需要检查以确保实际选择了某些内容.

编辑:

从你的评论中听起来你只是想让它辞职第一响应者.你可以通过调用手动完成[textView.window makeFirstResponder:nil];

  • @Justin:没有取消选择这样的东西; 插入点是空长度的选择.弗朗西斯的答案将取消选择所选的任何内容,并在文本末尾建立一个空选择(插入点).假设`textView`指向NSTextView(而不是`nil`),并且在此代码运行后实际上没有设置你想要取消选择的选择,弗朗西斯的建议应该有效. (2认同)

小智 6

这几乎对我有用;

[textView.window makeFirstResponder:nil];
Run Code Online (Sandbox Code Playgroud)

但是,我将第一响应者设置为nil时遇到了麻烦.如果我将它设置为任何其他视图,它似乎按照您的意愿.

[textView.window makeFirstResponder:[textView superview]];
Run Code Online (Sandbox Code Playgroud)

测试了10.7狮子.


Ben*_*Ben -2

[textView setDelegate:self];
Run Code Online (Sandbox Code Playgroud)

我有一种感觉,你的委托方法之一正在阻止事情发生。请参阅“管理选择”下的文档。