2011-05-17 59 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)

相关问题