2011-05-17 30 views
2

我有一個NSTableView,它顯示一些代表我的自定義對象的信息。我沒有使用綁定。將可編輯的NSTextFieldCell添加到我的NSTableView

通常,我創建自己的NSCell來顯示數據,但是一旦我在NSTextFieldCell之後顯示對象的字符串值,並讓用戶編輯它。

我可以使用下面的代碼成功地添加NSTextFieldCell,但它不可編輯。

NSTextFieldCell *textField = [[NSTextFieldCell alloc] init]; 
[textField setFont:[NSFont fontWithName:@"Helvetica Bold" size:13]]; 
[textField setTextColor:[NSColor colorWithDeviceRed:0.1058823529 green:0.2117647059 blue:0.3294117647 alpha:1.0]]; 
[textField setStringValue:projectName]; 
[textField setEditable:YES]; 
[textField setBordered:NO]; 

[textField drawWithFrame:textRect inView:controlView]; 
[textField release]; 

有人可以幫助我嗎?

回答

3

NSTextFieldCell是用flyweight模式實現的(我在「Cocoa Design Patterns」一書中閱讀了它),每列只有一個單元格的實例。在界面構建器中編輯它時,可以看到這種證據。當您單擊以編輯NSTableView時,單元格的單個實例會從之前的位置跳入並處理您的編輯。

正如您所說,這樣做對單元格的視覺外觀(繪圖)起作用,並且適用於NSTextField,因爲每個NSTextField每個視圖必須只有一個單元格,因此當您想要編輯它時就會出現這種情況。

然而,在這種情況下,您正在創建一個單元格,繪製它,然後通過在代碼末尾釋放它將它踢出內存。那麼當你試圖編輯它時,你如何期待這個單元格被設置爲可編輯狀態?它不再存在。

嘗試創建時表視圖建立一個單細胞,並利用該自定義單元格設置爲 右表列:

- (void)setDataCell:(NSCell *)aCell 

或者你可以繼承NSTextFieldCell,做你的定製在那裏,並設置接口構建器中的列的單元類(或者如果您處於最前沿的話,則爲XCode 4)

相關問題