Xcode 7.0.1 Swift 2.0
ボタンだと、下記のようにできます。
self.myButton.addTarget(self, action: "onClickMyButton:", forControlEvents: .TouchUpInside)
UIImageViewだと、addTargetは使えません。
参考:SwiftにてUIImageViewをTap検知後、詳細画面に遷移したい
上記を参考に、下記のように作成してみましたが、エラーはでませんが、検知しません。
let gesture = UITapGestureRecognizer(target:self, action: "onTouchImg:") imgView.addGestureRecognizer(gesture) func onTouchImg(recognizer: UITapGestureRecognizer){ print("touched!") }
touchesBeganを使って座標で計算しようかなと思いまして、下記をとりあえずつくりましたが、これも反応しません。
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { super.touchesBegan(touches, withEvent:event) print("123") }
参考:UILABELやUIIMAGEVIEWが応答しない場合の対処法
userInteractionEnabledはUIViewクラスのプロパティで、デフォルトではNOらしい。これをtrueにしないと反応しないらしい。
imgView.userInteractionEnabled = true
上記を追加したが、反応しない。
どうも、UIScrollViewを使っていることが原因っぽい。UIScrollViewを外すと反応する。
参考:UILabel・UIImageViewでタッチイベントを拾う方法の例外
しかし 「UIScrollViewの上に乗っているUILabeやUIImageView」 の場合は、 タップしてもtouchesBeganメソッドやtouchesEndedメソッドが反応しない。 (UIScrollViewのtouchesBegan/touchesEndedメソッドの実装によるものと推測)
UIScrollView上にある、UIImageViewとかUILabelのタッチイベントを検知するには、UITapGestureRecognizerを使い、対象のviewのuserInteractionEnabledをtureにしたら反応した。