使用this Stackoverflow question中的可编辑标头实现了NSTableView。除了在表格中双击以编辑单元格外,一切正常。这不再有效。
我怀疑这是因为NSTableView setDoubleAction:
位设置为自定义方法,然后该方法成为表中所有双击事件的处理程序(原始问题的代码示例如下):
-(void)setupTableHeader:(id)table {
NSArray *columns = [table tableColumns];
NSEnumerator *cols = [columns objectEnumerator];
NSTableColumn *col = nil;
NBETableHeaderCell *iHeaderCell;
while (col = [cols nextObject]) {
iHeaderCell = [[NBETableHeaderCell alloc] initTextCell:[[col headerCell] stringValue]];
[col setHeaderCell:iHeaderCell];
[[col headerCell] setEditable:YES];
[iHeaderCell release];
}
[table setTarget:self];
[table setDoubleAction:@selector(doubleClickInTableView:)]; // < This bit
}
我的问题是,如何恢复用于编辑表格单元格的双击功能?
谢谢。
答案 0 :(得分:1)
在准备问题后不久找到了答案,并认为它可能是Q&amp; A。
在doubleClickInTableView:
方法中,检查以确保单击标题单元格。因此,使用else子句扩展该检查就足够了,并在那里实现editColumn:row:withEvent:select:
:
-(void)doubleClickInTableView:(id)sender
{
NSInteger row = [sender clickedRow];
NSInteger column = [sender clickedColumn];
if(row == -1&& column >= 0)
{
NSTableColumn *tableColumn = [[sender tableColumns] objectAtIndex:column];
NSTableHeaderView *headerView = [sender headerView];
YCTableHeaderCell *headerCell = [tableColumn headerCell];
NSWindow *window = [[NSApplication sharedApplication] mainWindow];
id cellEditor = [window fieldEditor:YES forObject:sender];
[headerCell setHighlighted:YES];
[headerCell selectWithFrame:[headerView headerRectOfColumn:column]
inView:headerView
editor:cellEditor
delegate:headerCell
start:0
length:headerCell.stringValue.length];
[cellEditor setBackgroundColor:[NSColor whiteColor]];
[cellEditor setDrawsBackground:YES];
}
// This bit below.
else if(row >= 0 && column >= 0)
{
[sender editColumn:column row:row withEvent:nil select:true];
}
}