2012-03-22 65 views
4

我有一個自定義視圖,其中有幾個NSTextField控件,我想爲其提供自定義自動完成功能,並且已成功實施所有使用NSTextFieldDelegate協議的控件。自動完成是全名或地名,具體取決於正在編輯的文本字段。Cocoa:停止自動完成空間鍵的字段編輯器

問題是自動補全幾乎總是包含一個空格字符,因此如果用戶輸入的內容與建議匹配,但不想接受該建議,則字段編輯器將在用戶接受建議按下空格鍵。我希望字段編輯器只接受使用Tab鍵的建議。

據我所知,這將涉及到子類NSTextView提供一個自定義字段編輯器,這是documented by Apple作爲可接受的方式,但是我不清楚我需要重寫什麼方法以及重寫的方法需要做什麼,爲了得到我想要的東西。

任何人都可以建議這是如何實現的嗎?

+0

你能提供你正在描述的自動完成詞的類型的例子? – 2012-03-25 00:44:50

+0

@RobKeniger我編輯了我的問題。你是誰?如果你不抓住我的每一步,我就無法完成任務! :D – trojanfoe 2012-03-25 09:12:43

回答

6

我承認我一直在摸索這個問題相當長的一段時間較早,I discovered an acceptable answer via Google-fu.前魔碼,從原來的回答者公然被盜:

@interface MLFieldEditor : NSTextView @end 

@implementation MLFieldEditor 


- (void)insertCompletion:(NSString *)word forPartialWordRange:(NSRange)charRange movement:(NSInteger)movement isFinal:(BOOL)flag { 
    // suppress completion if user types a space 
    if (movement == NSRightTextMovement) return; 

    // show full replacements 
    if (charRange.location != 0) { 
     charRange.length += charRange.location; 
     charRange.location = 0; 
    } 

    [super insertCompletion:word forPartialWordRange:charRange movement:movement isFinal:flag]; 

    if (movement == NSReturnTextMovement) 
    { 
     [[NSNotificationCenter defaultCenter] postNotificationName:MLSearchFieldAutocompleted object:self userInfo:nil]; 
    } } 

@end 

Additional reference

+1

好東西 - 我會試一試,讓你知道。給我莫里西亞一個吻。 – trojanfoe 2012-03-29 09:16:38

+0

偉大的作品 - 非常感謝! – trojanfoe 2012-03-29 19:32:59

+0

@trojanfoe很高興幫助!不要忘記給予獎勵。 :) – MrGomez 2012-03-29 19:40:21