使用NSCell选择文本(内容)而不是单元格

时间:2011-01-26 18:49:19

标签: objective-c macos nsoutlineview nscell

我目前正在使用NSOutlineView进行项目...

我当然使用NSCell,我需要能够在单元格中选择文本... 或者至少......阻止细胞的选择(和突出显示)......

我在IB上搜索所有选项,但找不到合适的选项......

有没有办法,无论是否以编程方式阻止选择/突出显示单元格,还是让用户选择单元格内容?

谢谢=)

3 个答案:

答案 0 :(得分:2)

与NSCell相关的并不多,也许您希望在代理中实施outlineView:shouldSelectItem:

在NSCell上,setEnabled:NO也可以提供帮助。来自文档:

setEnabled:(BOOL)flag

已禁用的单元格文本更改为灰色。如果单元格被禁用,则无法突出显示,不支持鼠标跟踪(因此无法参与目标/操作功能),也无法进行编辑。但是,您仍然可以以编程方式更改已禁用单元格的许多属性。 (例如,setState:方法仍然有效。)

答案 1 :(得分:0)

尝试设置:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

您也可以尝试覆盖highlightSelectionInClipRect:,但我不完全确定这会有效。

答案 2 :(得分:0)

我们来看一个快速的例子,如下面的大纲视图。共有3列:firstNamelastNamefullName

enter image description here

在这个特定示例中,假设我们只允许firstNamelastNamefullName(可能来自firstName和{{1}时可编辑}}) 不是。您可以通过选中或取消选中表列的可编辑复选框,在Interface Builder中进行设置。为此,在其中一个表列(不是标题,但在大纲视图内)单击3次;首先选择lastName,然后选择NSScrollView,然后选择NSOutlineViewenter image description here

您可以设置如下属性:

enter image description here

enter image description here

enter image description here

这提供了一个开始,为整个列设置默认的可编辑值。如果您需要更多地控制特定行的项值是否可编辑,则可以使用NSTableColumn委托方法:

outlineView:shouldEditTableColumn:item:

如果要控制大纲视图中的特定行是否可选(例如,您可以阻止选择组项),可以使用#pragma mark - #pragma mark <NSOutlineViewDelegate> - (BOOL)outlineView:(NSOutlineView *)anOutlineView shouldEditTableColumn:(NSTableColumn *)tableColumn item:(id)item { if ([[tableColumn identifier] isEqualToString:@"firstName"] || [[tableColumn identifier] isEqualToString:@"lastName"]) { return YES; } else if ([[tableColumn identifier] isEqualToString:@"fullName"]) { return NO; } return YES; }

outlineView:shouldSelectItem: