我的NSTableCellView中有多个NSTextField:
通过双击操作,我调用[self.outlineView editColumn:0 row:clickedRow withEvent:nil select: YES];
,它可以在第一个文本字段中激活编辑。我还在IB中设置了nextKeyViews,以便用户可以按Tab键来选中所有字段。但是当我尝试用鼠标键直接选择文本字段时,它永远不会起作用。它只选择/取消选择NSTableCellView上的编辑,因此每次只编辑第一个文本字段。
如何让这个工作,以便我可以选择和编辑正确的字段?
答案 0 :(得分:1)
找到解决方案:
- (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