我需要在NSViewController的子类中捕获mouseDown和keyDown事件,由于这是不可能的(如果我错了,请纠正我),我将GameViewController类留空,并将其所有方法放到一个新的GameView类中。在GameViewController.xib的身份检查器中,我将类设置为GameView,而File的所有者设置为GameViewController。毕竟,我的mouseDown方法是有效的,但keyDown不起作用。我试过这个:
- (BOOL) acceptsFirstResponder {
return YES;
}
但这无济于事。
请告诉我该怎么做。
UPD:实际上keyDown方法是有效的,但首先我需要点击窗口空白处的某个地方,然后一切都按计划进行。再次触发mouseDown事件,没有任何问题。我可能做错了什么?
您的视图在提供第一个响应程序时接受它,但在单击之前,没有任何东西试图使它成为第一个响应者。
在显示窗口之前设置一段时间的initialFirstResponder
。如果您使用的是NIB,可以在那里进行设置。或者你可以通过编程来实现。
窗口显示后,可以调用[window makeFirstResponder:view]
使视图成为其窗口的第一个响应程序。