6

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

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

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

感谢您提供任何线索。

4

2 回答 2

7

您可以在 Interface Builder 中执行此操作,方法是选择 Text Field Cell,然后使用 Attributes Inspector,向下滚动到名为“Behavior”的下拉菜单并选择“Editable”。

仅此一项就使您能够双击单个单元格并将它们变成可编辑的文本字段。

为了使您所做的编辑生效,您还必须从 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 Docs on delegates] ( https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html#//apple_ref/doc/ uid/TP40002974-CH7-SW18 )

于 2013-07-18T23:52:38.530 回答
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!
     }
}
于 2013-02-24T21:10:28.500 回答