サブビュータッチイベントが発生したときに、ビューコントローラーに通知します
-
27-09-2019 - |
質問
ビューにカスタムサブビューがあるuiviewcontrollerがあります。
このカスタムサブビューは、タッチイベントを追跡し、スワイプジェスチャーをレポートする必要があります。
現在、私はサブビュークラスでタッチモーイングをし、触れ、タッチエスカンセルを入れました。いくつかの追加のロジックを使用して、スワイプジェスチャーを取得し、ハンドラライトスワイプとハンドルレフスワイプメソッドを呼び出すことができます。そのため、サブビュー内でスワイプすると、ローカルスワイプ処理方法を呼び出します。これはすべて正常に機能します。
しかし、私に本当に必要なのは、ハンドラライトスワイプとハンドルレフスワイプの方法がビューコントローラーに入ることです。サブビュークラスに残すことができましたが、すべてのロジックとデータも持ち込む必要があり、そのようなMVCのアイデアを破壊する必要があります。
だから私の質問は、これを処理するためのきれいな方法があるということですか?基本的に、タッチイベントメソッドをサブビューに保持し、その特定のビューをトリガーするだけです。ただし、これらのタッチイベント(またはこの場合はジェスチャーのスワイプ)が発生したときに、ビューコントローラーに通知されたいと思います。
何か案は?
ありがとう。
アップデート:
ヘンリックの提案を使用して、私がしたことの簡単なサンプルを次に示します(読書を救うために):
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];
同様に、右のスワイプについても。
解決
使用できます 通知センター 別の(観測)オブジェクトに通知を送信する。
他のヒント
また、OS 3.2以降で利用できるジェスチャー認識システムを使用することもできます。ジェスチャー認識者では、ビュークラスからタッチハンドリングを切り離すことができ、ここでやっていることのようなもののために設計されています。この場合、のインスタンスを作成します UIPanGestureRecognizer
, 、コントローラーを認識者のターゲットとして追加します(通常のものを使用します -addTarget:action:
構文)、次に、認識者をビューに追加します -addGestureRecognizer:
. 。そのため、ユーザーがビューを横切ってスワイプしたときにコントローラーが呼び出された一連のアクションメッセージを取得し、認識者を呼び出すことで動きを確認できます -translationInView:
方法。