ビューにカスタムサブビューがある UIViewController があります。
このカスタム サブビューは、タッチ イベントを追跡し、スワイプ ジェスチャを報告する必要があります。
現在、サブビュー クラスに touchesBegan、touchesMoved、touchesEnded、および touchesCancelled を配置しています。追加のロジックを使用して、スワイプ ジェスチャを取得し、handleRightSwipe メソッドと handleLeftSwipe メソッドを呼び出すことができます。したがって、サブビュー内でスワイプすると、ローカルのスワイプ処理メソッドが呼び出されます。これはすべてうまくいきます。
しかし、実際に必要なのは、handleRightSwipe および handleLeftSwipe メソッドがビュー コントローラーにあることです。それらをサブビュー クラスに残すこともできますが、すべてのロジックとデータも取り込む必要があり、MVC のアイデアが壊れてしまいます。
だから私の質問は、これを処理するクリーンな方法はありますか? 基本的に、タッチイベントメソッドをサブビューに保持して、その特定のビューでのみトリガーされるようにしたいと考えています。しかし、これらのタッチ イベント (この場合はスワイプ ジェスチャ) が発生したときにビュー コントローラーに通知することも必要です。
何か案は?
ありがとう。
アップデート:
Henrik の提案を使用して、私が行ったことの簡単なサンプルを次に示します (読み物を節約するため)。
View Controllerを通知のオブザーバーとして設定しました(早い段階で)。
// NOTIFICATION_LEFT_SWIPE is defined as some unique string elsewhere.
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
// Note that imageView is the instance of my subview that is calling the notification.
// You can set this to nil if you don't want it to be specific.
[nc addObserver:self selector:@selector(handleLeftSwipe) name:@NOTIFICATION_LEFT_SWIPE object:imageView];
次に、handleLeftSwipe メソッドを実装します。これは、通知を受信したときに呼び出されます。
サブビューで、スワイプ ジェスチャを受信したときに通知を送信します。
// Note that NOTIFICATION_LEFT_SWIPE is the same one used in the view controller
// I put this in a global header I use. This is how you keep track of notifications.
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc postNotificationName:@NOTIFICATION_LEFT_SWIPE object:self];
右スワイプも同様です。