2011-11-21 81 views
4

我正在使用以下代码取消选择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]; 

为什么这不起作用任何想法?我确定我的网点设置正确,因为我可以操纵其他东西,比如它的字符串值。

+2

可可-dev的(我认为)线程即将NSText *场*,不NSText *查看*。这两者非常不同:NSTextField是一种控件,因此依赖于字段编辑器,而NSTextView不是控件,也不使用字段编辑器。 –

+0

我什至没有注意到。非常感谢。 – Justin

回答

-2
[textView setDelegate:self]; 

我有一种感觉,你的一个委托方法是防止事情发生。请参阅“管理选择”下的documentation

+0

如何?我有指定的。 – Justin

6

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

[textView setSelectedRange:NSMakeRange(textView.string.length, 0)]; 

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

编辑:

从您的评论听起来好像你只是希望它的辞职第一响应。你可以通过拨打电话[textView.window makeFirstResponder:nil];

+1

文本视图不使用字段编辑器。只有文本字段(以及可能类似的控件,如组合框)可以。 –

+0

这就是我的想法。除非Justin使用NSTextField,否则上面的代码应该可以工作。 –

+0

什么都不做。有另一种方法可以取消选择吗?顺便说一下,它是一个NSTextView,所以你是对的。 – Justin

-2

作为临时解决方案,直到有人提出一个更好的主意,setHidden:可以使用。我相信这不像推荐的那样高效,但它取消选择NSTextView

只需拨动两次,像这样:

[textView setHidden:TRUE]; 
[textView setHidden:FALSE]; 
5

这几乎是为我工作;

[textView.window makeFirstResponder:nil]; 

不过,我有麻烦设置第一个响应为零。如果我将它设置为任何其他视图,它似乎可以根据需要进行操作。

[textView.window makeFirstResponder:[textView superview]]; 

在10.7 Lion中测试。

+0

谢谢了。它在关键时刻帮助了我。 – Sid

2

我已经使用这种方法,它完美的作品:

[textView setSelectedRange:NSMakeRange(0, 0)]; 
2

正如前面setSelectedRange:会做的伎俩,但建议!

如果你的目标是完全删除选择和光标,f.e.如果你继承了NSTextView支持类似的行为像NSTextEditfirstResponder状态改变的情况下,你应该写:

- (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; 
} 
//------------------------------------------------------------------------------ 
相关问题