現在、ウィンドウに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」は、ゲームボードの各セルの高さとwithを格納するために使用しているNSPointインスタンス変数です)
この情報の送信に使用できるIBActionスタイルのメッセージをコントローラークラスに作成することはできますか?
これが機能することを私が想像していた方法は次のとおりです。
- カスタムビューでクリックされた座標のインスタンス変数を宣言します。
- コントローラクラスに(IBAction)を実装します。
- (id)senderポインターを使用して、座標を保持するインスタンス変数にアクセスします
- IBActionをInterfaceBuilderのカスタムビューにリンクします
これを試すために、カスタムビューでインスタンス変数として「cellX」と「cellY」を宣言しました。次に、コントローラークラスに以下を実装しました。
-(IBAction)cellClicked:(id)sender {
[self setCellAtPosX:[sender cellX] PosY:[sender cellY];
}
(cellXとcellYはインスタンス変数へのアクセサーメソッドです)
予想していたように、それはそれほど単純ではなく、IBActionをカスタムビューにリンクすることはできません。これを実装するための私のアプローチに欠けているものはありますか?
これに必要なのは、インターフェイスビルダーにターゲットアクションメッセージの送信先を指示する何らかの通知機能だけだと想像できます。私の場合は、mouseDown:実装の最後ですが、これからどこから始めればよいかわかりません。