我有一个游戏板,其中包含25个myGameTile图块,这是NSView的子类。 在mouseDown中:我想确定我点击了哪个图块并将ivar设置为代表值。
e.g。如果我单击tile 12,则将clickedTile设置为“12”或某个唯一表示该特定实例的值。
我打开从整数值12一直到某种内省/反射的任何东西,虽然内置的功能和优雅比黑客,运行时包装和修改更可取。不过,我知道我可能别无选择,只能依赖这些解决方案,所以请回答这些问题。我想知道我的所有选择。谢谢!
答案 0 :(得分:5)
您可以继承NSView并覆盖tag method,如文档中所述。
答案 1 :(得分:1)
您有几种可能性:
如果在Tile视图中处理mouseDown,则需要将self映射到tile ID。有三种简单的方法可以做到这一点:
显然,只要你没有将标签用于其他任何东西,使用标签是最简单的。
或者,您可以在父视图上实现hitTest,并返回父视图,然后在父视图中处理mouseDown。然后mouseDown将知道命中的位置,从而知道它是哪个区块。
答案 2 :(得分:0)
我认为hitTest:会做你想要的。像这样:
- (void)mouseDown:(NSEvent *)theEvent {
NSPoint aPoint = [theEvent locationInWindow];
NSView* viewHit = [self hitTest:aPoint];
if( viewHit != nil && viewHit != self ) {
// viewHit is our tile.
}
}