2

实现了一个带有可编辑标题的 NSTableView,就像在这个 Stackoverflow 问题中一样。一切正常,除了在表格中双击以编辑单元格。这不再有效。

我怀疑这是因为该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
}

我的问题是,如何恢复用于编辑表格单元格的双击功能?

谢谢你。

4

1 回答 1

2

准备好问题后不久就找到了答案,并认为这可能是一个问答。

在该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];
    }
}
于 2013-07-18T07:05:16.057 回答