Pocket
LINEで送る

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にしたら反応した。

Pocket
LINEで送る

カテゴリー: プログラミング

コメントください

関連記事

プログラミング

cakePHP2 – 多言語化

多言語化します。 cakephpマニュアルのこのページに説明が書いてあ 続きを読む …

プログラミング

Go言語によるビットコインのフルノード実装btcdを調べる(2)

btcdを実行した際のプログラムの流れを最初から確認してみます。 se 続きを読む …

%d人のブロガーが「いいね」をつけました。