2011-11-21 80 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; 
} 
//------------------------------------------------------------------------------ 
相關問題