NSOutlineView:如何将特定单元格置于编辑模式? (editColumn方法无法按预期工作)

时间:2011-07-04 17:35:26

标签: xcode cocoa nstableview nsoutlineview

我有NSOutlineView。当我在其中编辑一个单元格并点击返回时,我希望它下方的单元格立即进入编辑模式。

我以为我会使用controlTextDidEndEditing:委托方法来查找完成单元格编辑的时间,并使用editColumn:row:withEvent:select:方法将单元格置于编辑模式下。

这是一个演示方法,我粘贴到Apple演示代码项目的“appcontroller.m”中,“DragNDropOutlineView”:

- (void)controlTextDidEndEditing:(NSNotification *)aNotification
{
    NSTreeNode* treeNodeJustEdited;
    NSInteger indexOfCurrentRow = [outlineView selectedRow];
    if (indexOfCurrentRow < 0) //no row selected
        return;

    treeNodeJustEdited = [outlineView itemAtRow:indexOfCurrentRow];
    NSTreeNode* theRootNode = rootTreeNode;
    NSInteger numberOfChildren = [[theRootNode mutableChildNodes]count];
    NSInteger indexOfLastChild = numberOfChildren - 1;

    if (indexOfCurrentRow < indexOfLastChild)
    {
       [outlineView selectRowIndexes:[NSIndexSet indexSetWithIndex:indexOfCurrentRow+1] byExtendingSelection:NO];
       [outlineView editColumn:0 row: indexOfCurrentRow+1 withEvent:nil select:NO];
    }
}

由于某种原因,这会做到以下几点:

  • 正确突出显示单元格下方的行 刚刚编辑过。但是:
  • 禁用它 突出显示,即将其置于光明之中 灰色
  • 使细胞位于细胞下方 刚编辑,看不见。点击 该单元格两次返回表格 正常。

为了让这种方法按预期执行,我缺少什么?

1 个答案:

答案 0 :(得分:0)

这是另一个问题,它与你的相似

希望有帮助。

NSTableView & NSOutlineView editing on tab key