【Swift】UIScrollViewを使うとtouchesBeganが呼ばれない。iOS、iPhoneアプリ開発
こんにちは、iPhoneアプリ開発者の中川です。
UIScorllViewにUI部品を乗せてゴチャゴチャしてるのですが、タッチイベントが取得できない。。
うーん困ったと思いながらGoogle検索かけていると、以下の内容を発見。
スクロールビューがタッチイベントを受け取り(スクロール処理のため)、タッチイベントが子ビューに伝播されないためだ。
つまり、スクロールビューがfirstResponderになっている。
どうやらUIScrollVieクラスのデフォルトではタッチイベントが取得できるメソッドが実装されていないようだ。
なので、UIScrollViewメソッドを継承してtouchesBeganを拡張してやれば良いというわけです。
まずは以下のクラスを作成する。(Swift2.0でtouchesBeganメソッドの記述が変更になったようです。)
1 2 3 4 5 6 7 8 9 |
import UIKit class MyScrollView: UIScrollView { override func touchesBegan(touches: Set superview?.touchesBegan(touches, withEvent: event) } } |
ちなみに、以前のSwiftではこのように書いてました。(コメントでエラーを指摘していただきました。)
1 2 3 4 5 6 7 8 9 |
import UIKit class MyScrollView: UIScrollView { override func touchesBegan(touches: Set superview?.touchesBegan(touches, withEvent: event) } } |
そして、UIViewcontrollerなどの実装部分でUIScrollViewの部分をMyScrollViewに変更すれば良い。
1 |
let scrView = MyScrollView() |
無事タッチイベントを取得できるようになりました。ヨカッタヨカッタ。
ディスカッション
コメント一覧
こんにちは。
私も同じようなことで困っていたので使わせていただいたのですができなくて困っています。
これもうわかんねぇな…
まず、superview?.touchesBegan(touches, withEvent: event) でエラーが出ますね。
コードの全文を見せていただきたいのですがよろしいでしょうか?
よろしければ是非オナシャス!
田所さん。
ご指摘のコメントありがとうございます。
どうやらtouchesBeganメソッドの記述がSwift2.0から変更になったようです。
記事を編集しなおしたので、ご確認よろしくお願いいたします。
今後ともよろしくオナシャス!
ありがとナス!
早速試させていただきます(≧Д≦)
わざわざすいません!
こちらこそオッスお願いしまーす!