我有一个 tableView,有 3 列包含 NSTextFieldCell。一切都充满了绑定。
其中一列的单元格的文本是计算出来的,不能直接编辑。对于本专栏,我希望当单元格进入编辑模式时,显示一个按钮或自定义视图,而不是 textField。
换句话说,我想要一个NSCell ,它在不被编辑时是一个NSTextFieldCell ,而在被编辑时是一个NSButtonCell(或自定义视图)。
有什么提示可以继续这个吗?
这是我尝试过的,但没有成功:
- 尝试#1:
我将 a 子类化NSTextFieldCell
并覆盖fieldEditorForView:
如下所示 => 问题是我返回的 NSButton 没有响应setDelegate:
,可能还有许多其他的东西。
- (NSTextView *)fieldEditorForView:(NSView *)aControlView {
NSTableView *tableView = (NSTableView *) aControlView;
// Manually computing column and row index for testing purposes
NSButton* button = [[NSButton alloc] initWithFrame:[tableView frameOfCellAtColumn:2 row:2]];
return (NSTextView *)button;
}
- 尝试#2:
子类NSTextFieldCell
和覆盖drawWithFrame: inView:
=> 此方法仅用于在不处于编辑模式时绘制单元格。
- 尝试#3:
这条线索有一些潜力,但我显然在这里遗漏了一些东西。在我的窗口委托中
实现,并返回一个自定义字段编辑器。windowWillReturnFieldEditor: toObject:
我似乎在正确的轨道上,但我错过了一些东西。参数 anObject 从来都不是我的自定义单元格(我仔细检查过,它在 XIB 中正确定义)。
- (id)windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)anObject
{
if ([anObject isKindOfClass:[NSCellTextAndButtonAtEditTime class]])
{
NSLog(@"Going there");
NSButton* button = [[NSButton alloc] initWithFrame:CGRectMake(0, 0, 300, 20)];
button.title = @"test";
return button;
}
return nil;
}