NSTableCellView中的多个NSTextField;只有第一个可以直接编辑

时间:2014-04-12 01:31:39

标签: cocoa nstableview nsoutlineview nstablecellview

我的NSTableCellView中有多个NSTextField: enter image description here

通过双击操作,我调用[self.outlineView editColumn:0 row:clickedRow withEvent:nil select: YES];,它可以在第一个文本字段中激活编辑。我还在IB中设置了nextKeyViews,以便用户可以按Tab键来选中所有字段。但是当我尝试用鼠标键直接选择文本字段时,它永远不会起作用。它只选择/取消选择NSTableCellView上的编辑,因此每次只编辑第一个文本字段。

如何让这个工作,以便我可以选择和编辑正确的字段?

1 个答案:

答案 0 :(得分:1)

找到解决方案:

  • 子类NSTableView / NSOutlineView
  • 在子类中,覆盖- (void) mouseDown:(NSEvent *)theEvent

在mouseDown中:

        NSPoint selfPoint = [self convertPoint:theEvent.locationInWindow fromView:nil];
        NSInteger row = [self rowAtPoint:selfPoint];
        if (row>=0) [(ContactInfoTableCellViewMac *)[self viewAtColumn:0 row:row makeIfNecessary:NO]
                     mouseDownForTextFields:theEvent];

在ContactInfoTableCellViewMac中:

- (void) mouseDownForTextFields:(NSEvent *)theEvent {
    if ((NSCommandKeyMask | NSShiftKeyMask) & [theEvent modifierFlags]) return;
    NSPoint selfPoint = [self convertPoint:theEvent.locationInWindow fromView:nil];
    for (NSView *subview in [self subviews])
        if ([subview isKindOfClass:[NSTextField class]])
            if (NSPointInRect(selfPoint, [subview frame]))
                [[self window] makeFirstResponder:subview];
}

完整参考:Respond to mouse events in text field in view-based table view