我目前有一个自定义视图类,它在窗口上绘制 2d 游戏板表示。
当用户单击板上时,我使用 mouseDown: 事件从鼠标位置计算单元格坐标(我在自定义视图类中执行此操作)。
- (void)mouseDown:(NSEvent*)theEvent {
// Get position of mouse click:
NSPoint point = [theEvent locationInWindow];
NSPoint mousePos = [self convertPoint:point fromView:nil];
// Calculate which cell has been clicked:
int cellX = mousePos.x / gridSize.width;
int cellY = mousePos.y / gridSize.height;
}
(在上面的片段中,'gridSize' 是一个 NSPoint 实例变量,我用它来存储游戏板中每个单元格的高度和宽度)
我是否可以在我的控制器类中创建可用于发送此信息的 IBAction 样式消息?
我想象这可以工作的方式是:
- 在自定义视图中为单击的坐标声明实例变量。
- 在控制器类中实现一个(IBAction):
- 使用 (id)sender 指针访问保存坐标的实例变量
- 将 IBAction 链接到界面生成器中的自定义视图
为了尝试这个,我在自定义视图中将“cellX”和“cellY”声明为实例变量。然后我在我的控制器类中实现了以下内容:
-(IBAction)cellClicked:(id)sender {
[self setCellAtPosX:[sender cellX] PosY:[sender cellY];
}
(cellX 和 cellY 是实例变量的访问器方法)
正如我所期望的那样,它并不是那么简单,它不会让我将 IBAction 链接到自定义视图。我的实现方法有什么遗漏吗?
我可以想象,所有这一切都需要某种通知器,它告诉接口构建器在哪里发送目标操作消息——在我的例子中,在 mouseDown: 实现的末尾,但我找不到从哪里开始!