实现了具有可编辑标头的NSTableView,例如在此Stackoverflow问题中。除了双击表以编辑单元格外,其他所有操作均正常。这不再起作用。
我怀疑发生这种情况是因为将NSTableView setDoubleAction:
bit设置为custom方法,然后该方法成为了表中所有双击事件的处理程序(以下是原始问题的代码示例):
-(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
}
我的问题是,如何恢复用于编辑表格单元格的双击功能?
谢谢你。
在准备好问题后不久就找到了答案,并认为这可能是一个问答。
在该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];
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句