无法通过点击使NSTableView可编辑

时间:2013-02-02 18:37:40

标签: xcode nstableview

我正在尝试制作一个简单的NSTableView(仅文本),可以单击单元格视图来编辑文本。这里的所有教程和相关问题都表明这是自动行为,但我无法得到它。

我可以轻松链接我的代理和数据源;我可以通过编程方式填充所有单元格,并且我可以弄清楚如何处理在编辑时输入的新文本。 ...我只是无法打开文本框进行编辑!

(NSTable列在IB中标记为可编辑)

感谢您提供任何线索。

2 个答案:

答案 0 :(得分:7)

您可以在Interface Builder中选择文本字段单元格,然后使用属性检查器,向下滚动到标题为“行为”的下拉菜单,然后选择“可编辑”。

仅凭这一点,您就可以双击单个单元格并使它们成为可编辑的TextField。

要使您所做的编辑生效,您还必须从NSTableViewDelegate协议实现以下方法: - (void)tableView:setObjectValue:forTableColumn:row:

[请参阅Apple Docs了解此功能](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Protocols/NSTableDataSource_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/NSTableViewDataSource/tableView:objectValueForTableColumn:row:)

像往常一样,此方法必须在您设置为NSTableView对象的委托的对象中实现。

[如果您想要对其进行审核,请参阅代表们的Apple文档](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html#//apple_ref/doc/uid/TP40002974-CH7-SW18

答案 1 :(得分:6)

在tableView:viewForTableColumn委托方法中,我必须专门设置每个单元格是可编辑的。

几周后它似乎没有问题。使用,但我仍然认为必须有一种不那么费力的方法。

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {


    NSTableCellView *cellView;
    if( [tableColumn.identifier isEqualToString:@"word"] )
    {
        wordCellView = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self];
        cellView = wordCellView;
        [cellView.textField setEditable:YES]; // Make Cell Editable!
     }
}