mouseDown:在NSTableView内的自定义NSTextField中

Mar*_*ark 6 cocoa nstextfield nstableview

我有一个基于视图的NSTableView.表中的每个视图都有一个自定义文本字段.

当用户点击表格视图中的文本字段(标签)时,我想触发一个动作(想象一下,在每个表格单元格中都有一个带有自定义动作的超链接).

我已经创建了一个基本NSTextField子类来捕获鼠标事件.但是,它们仅在第二次单击时触发,而不是第一次单击.

我尝试使用一个,NSButton并立即开火.

这是自定义标签的代码:

@implementation HyperlinkTextField

- (void)mouseDown:(NSEvent *)theEvent {
    NSLog(@"link mouse down");
}

- (void)mouseUp:(NSEvent *)theEvent {
    NSLog(@"link mouse up");
}

- (BOOL)acceptsFirstResponder {
    return YES;
}

- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent {
    return YES;
}
@end
Run Code Online (Sandbox Code Playgroud)

trs*_*rss 7

有同样的问题.这里接受的答案对我不起作用.经过多次努力之后,当我选择"无"而不是默认的"常规"时,神奇地工作,而另一个选项是IB中表格视图的"突出显示"选项的"源列表"!

编辑:接受的答案结果是误导,因为方法是为表视图重载而不是文本字段,如答案所示.在/sf/answers/950562861/上更清楚地给出了它,但无论如何,更具体的感觉有点hacky.

  • 看起来这实际上是有效的.我试图触发mouseUp,但这不适用于任何一种方法.MouseDown适用于两者 (2认同)

Mar*_*ark 6

事实证明,NSTableView并且NSOultineView处理NSTextField实例的第一响应者状态的方式不同于NSButton.

让标签像第一次点击一样响应第一次点击的关键是在我自定义文本字段类的情况下覆盖[NSResponder validateProposedFirstResponder:forEvent:]返回YES.

文档:

http://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSResponder_Class/Reference/Reference.html#//apple_ref/occ/instm/NSResponder/validateProposedFirstResponder:forEvent: