将可编辑的NSTextFieldCell添加到我的NSTableView

时间:2011-05-17 04:53:39

标签: cocoa nstableview nstextfieldcell

我有一个NSTableView,它显示一些代表我的自定义对象的信息。我没有使用绑定。

通常,我创建自己的NSCells来显示数据,但是一次我会在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];

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:3)

NSTextFieldCell是用flyweight模式实现的(我在“Cocoa设计模式”一书中读过它),每列只有一个单元格的实例。在界面构建器中编辑时,可以看到某种证据。当您单击以编辑NSTableView时,该单元格的单个实例将从之前的位置跳转并为您处理编辑。

正如你所说,这样做适用于单元格的视觉外观(绘图),也适用于NSTextField,因为每个NSTextField每个视图必须只有一个单元格,因此它在周围当你想编辑它时。

但是在这种情况下,您正在创建一个单元格,绘制它,然后通过在代码末尾释放它来将其踢出内存。那么,当您尝试编辑时,您如何期望已设置为可编辑的单元格?它不再存在。

在设置表格视图并将自定义单元格设置为时,尝试创建单个单元格 右表列使用:

- (void)setDataCell:(NSCell *)aCell

或者你可以继承NSTextFieldCell并在那里进行自定义,并在界面构建器中设置列的单元类(如果你处于最前沿,则为XCode 4设置!)