2011-05-24 33 views
3

我在窗口中放置了一個文本區域,並且我希望文本區域僅在聚焦時繪製背景。 我知道窗口中的所有控件共享一個字段編輯器。 我試過子類nstextfield並實現了becomeFirstResponder和resignFirstResponder。 並嘗試使用窗口的自定義單例編輯器。NSTextField:如何僅在聚焦時繪製背景

任何人都知道如何做到這一點?


在NSWindow,字段編輯器(一個單NSTextView實例)的每一個文本框或按鈕共享一個實例,因此,當您單擊文本框,文本框變成firstResponser第一,然後迅速把它傳遞到共享字段編輯器。因此,當文本字段失去焦點時,文本字段的resignFirstResponder將永遠不會被調用(因爲字段編輯器現在是FirstResponder)。

你可以看看fieldEditor:forObject:在NSWindow API中。 http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSWindow_Class/Reference/Reference.html#//apple_ref/occ/instm/NSWindow/fieldEditor:forObject


SOLUTION: (謝謝,邁克爾戈爾巴奇) 在我的窗控制器

- (id)windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)anObject 
{ 
    NSText *text = [sender fieldEditor:YES forObject:self]; 
    if(text&&[anObject isKindOfClass:[MyCustomTextField class]]) 
    { 
     [text setBackgroundColor:[NSColor whiteColor]]; 
     [text setDrawsBackground:YES]; 
    } 
    return text; 
} 

回答

7

我只是做這個最近,在一個的tableView。您需要使用自定義單元格和fieldEditor。具體而言,您需要撥打NSText/NSTextView對象(現場編輯器)上的setDrawsbackground:YES,然後setBackground:配置您選擇的顏色。有兩個地方可以設置自定義字段編輯器。

之一是在定製NSTextFieldCell子類中實現setUpFieldEditorAttributes:您已經配置您的NSTextField使用,另一種是使用窗口或窗口的委託方法windowWillReturnFieldEditor:toObject:

請注意,如果第一種方法對於特定設置不起作用,則有時您需要使用第二種方法,因爲它在代碼路徑的前面得到。

+0

我會稍後再試一試。非常感謝。 – Luke 2011-05-26 08:32:44

+0

它的工作原理!非常感謝 – Luke 2011-05-26 08:53:12

+0

'setUpFieldEditorAttributes'方法在哪裏?我找不到那個。 – uchuugaka 2013-04-30 06:32:42