以编程方式取消选择NSTextView中的文本?
我正在使用以下代码取消选择NSTextView
,建议使用here。不幸的是,一切都没有发生。我试过我知道的调试它,但一切似乎都正常工作,但它不影响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];
为什么这不起作用任何想法?我确定我的网点设置正确,因为我可以操纵其他东西,比如它的字符串值。
[textView setDelegate:self];
我有一种感觉,你的一个委托方法是防止事情发生。请参阅“管理选择”下的documentation。
如何?我有指定的
我不确定NSTextViews是否使用字段编辑器,您是否尝试过直接在文本视图中调用方法?
[textView setSelectedRange:NSMakeRange(textView.string.length, 0)];
例如,可以调整范围位置以将光标移动到开始或结束位置。在调用此方法之前,您可能还需要检查以确定实际选定的内容。
编辑:
从您的评论听起来好像你只是希望它的辞职第一响应。你可以通过拨打电话[textView.window makeFirstResponder:nil];
文本视图不使用字段编辑器。只有文本字段(以及可能类似的控件,如组合框)可以。 –
这就是我的想法。除非Justin使用NSTextField,否则上面的代码应该可以工作。 –
什么都不做。有另一种方法可以取消选择吗?顺便说一下,它是一个NSTextView,所以你是对的。 – Justin
作为临时解决方案,直到有人提出一个更好的主意,setHidden:
可以使用。我相信这不像推荐的那样高效,但它取消选择NSTextView
。
只需拨动两次,像这样:
[textView setHidden:TRUE];
[textView setHidden:FALSE];
这几乎是为我工作;
[textView.window makeFirstResponder:nil];
不过,我有麻烦设置第一个响应为零。如果我将它设置为任何其他视图,它似乎可以根据需要进行操作。
[textView.window makeFirstResponder:[textView superview]];
在10.7 Lion中测试。
谢谢了。它在关键时刻帮助了我。 – Sid
我已经使用这种方法,它完美的作品:
[textView setSelectedRange:NSMakeRange(0, 0)];
正如前面setSelectedRange:
会做的伎俩,但建议!
如果你的目标是完全删除选择和光标,f.e.如果你继承了NSTextView
支持类似的行为像NSTextEdit
在firstResponder
状态改变的情况下,你应该写:
- (BOOL)resignFirstResponder
{
// Invalid range location will remove cursor too
[self setSelectedRange:NSMakeRange(NSUIntegerMax, 0)];
return YES;
}
//------------------------------------------------------------------------------
- (BOOL)becomeFirstResponder
{
[self setSelectedRange:NSMakeRange(0, self.string.length)];
return YES;
}
//------------------------------------------------------------------------------
可可-dev的(我认为)线程即将NSText *场*,不NSText *查看*。这两者非常不同:NSTextField是一种控件,因此依赖于字段编辑器,而NSTextView不是控件,也不使用字段编辑器。 –
我什至没有注意到。非常感谢。 – Justin