【Swift】UIScrollViewを使うとtouchesBeganが呼ばれない。iOS、iPhoneアプリ開発

2015年12月1日


こんにちは、iPhoneアプリ開発者の中川です。

UIScorllViewにUI部品を乗せてゴチャゴチャしてるのですが、タッチイベントが取得できない。。
うーん困ったと思いながらGoogle検索かけていると、以下の内容を発見。

スクロールビューがタッチイベントを受け取り(スクロール処理のため)、タッチイベントが子ビューに伝播されないためだ。
つまり、スクロールビューがfirstResponderになっている。

どうやらUIScrollVieクラスのデフォルトではタッチイベントが取得できるメソッドが実装されていないようだ。

なので、UIScrollViewメソッドを継承してtouchesBeganを拡張してやれば良いというわけです。

まずは以下のクラスを作成する。(Swift2.0でtouchesBeganメソッドの記述が変更になったようです。)

ちなみに、以前のSwiftではこのように書いてました。(コメントでエラーを指摘していただきました。)

そして、UIViewcontrollerなどの実装部分でUIScrollViewの部分をMyScrollViewに変更すれば良い。

無事タッチイベントを取得できるようになりました。ヨカッタヨカッタ。