如何使NSView立即获得焦点/第一响应者接受mouseDown事件?

时间:2013-10-23 23:27:38

标签: objective-c cocoa nstableview nswindow

我有一个带有2个单独的NSWindow的应用程序。

每个窗口都有一个小桌子,里面有两个项目。

这是我似乎无法解决的问题 - >

如果窗口#1处于活动/聚焦状态,我可以正常点击表格中的各个行。但是,如果我想在窗口#2中单击表中的行,我必须单击该表两次。第一次单击以使窗口#2处于活动/聚焦状态,最后第二次单击以实际选择该行。

如何在一次点击中选择NSTableViews中的行(无论他们的窗口是否对焦)?

3 个答案:

答案 0 :(得分:4)

我对NSTableView进行了细分。

-(BOOL)acceptsFirstMouse:(NSEvent *)theEvent {
   return YES;
}

答案 1 :(得分:3)

创建NSTableView的IBOutlet:

IBOutlet NSTableView* yourTable;

将它绑在你的桌子上。

然后使用:

[window2 makeFirstResponder: yourTable];

答案 2 :(得分:1)

问题是当你的第一个窗口处于活动状态时它是第一个响应者,所以显然你的tableview将成为window1的下一个响应者,直到你选择它为止。但对于第二个窗口,您的第一个响应者将是window2。因此,您必须双击该表两次,因为第一响应者设置为window2,并且它设置为表2以生成下一个响应者。如果你想单击并选择window2的表,那么你也可以通过绑定或以编程方式完成。