kkAyatakaのメモ帳。

誰かの役に立つかもしれない備忘録。

UIScrollViewのタッチイベント受け取り

デフォルトのUIScrollViewからはタッチイベントを取得できないので一手間加える必要がある。

  • UIScrollViewのサブクラスで受け取る
  • UIScrollViewのサブクラスでresponderチェーン呼び出して、Controllerで受け取る

とりあえず受け取るだけなら、UIScrollViewのサブクラスを作成して、各種メソッドをオーバーライドすればよい。ただし、これだとViewクラスにロジックを書き込むことになるので面白くない。できればイベントだけ受け取って、Controllerクラスで処理をしたい。

処理の移譲はdelegateのようにオブジェクトの参照を渡して呼び出す形でもよいし、NSNotificationで通知してやってもよいが、nextResponderに処理を移譲する方法でも実装することができる。

ちなみに公式のドキュメントを読み込んでないので、正規のやり方かどうかは不明。ただ、イベントはResponder Chainを伝播してくる訳だし、UIScrollViewのUser Interactonを無効にするとControllerクラスまでイベントが届くことから、問題ないと思う。

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesEnded:touches withEvent:event];
    
    [[selfnextResponder] touchesEnded:touches withEvent:event];
}