

下記のようにViewを作ってeventと関数のひも付けを行ったのですが、UIImageView部分がeventに反応しません。何か追加で設定すべき項目があるのでしょうか

・storyboard上でUILabelとUIImageViewを含んだViewを作り、ClassをUIControlに  
・viewController上でTouchDownと関数のひも付け

[code]

     [_control addTarget:self action:@selector(onClick:) forControlEvents:UIControlEventTouchDown];
    
[/code]


CC BY-SA 3.0
2015-03-11T02:05:37.757
7748
2015-07-04T05:27:28.457
2015-03-11T02:18:13.787
525
525
question
ios uiimage
UIImageViewを含んだViewにeventを設定したが、UIImageView部分でハンドリングしてくれない


UILabelのインスタンスと、UIImageViewのインスタンスのプロパティ「 **userInteractionEnabled**
」を有効（YES）に変更してください。この操作は、プログラムでも、Storyboardでも行えます。  
userInteractionEnabledは、UIViewのプロパティであり、デフォルトはYESです。つまりユーザの操作に反応することがデフォルトになっています。しかし、UILabelとUIImageViewのみ、デフォルトがNOになっています。ユーザの操作に反応してもらいたくない、「ただの」画像やテキストを表示するために、UIImageViewとUILabelを使用するケースが大半を占めるからだと考えられます。  
![画像の説明をここに入力](https://i.stack.imgur.com/WY38r.png)

あ、一足遅かったですか……このままでは中途半端なので、質問に対する回答から外れますが、関連するTipsを載せて、ちょっとだけかっこうをつけておこうと思います。

UIControlのサブクラスではない、UILabel、UIImageViewをタップして、アクションメソッドを実行する方法を載せておきます。これを使えば、背後にUIControlのサブクラスを配置する必要がなくなります。

それにはUIGestureRecognizerを使います。今回はそのサブクラスUITapGestureRecognizerで、タップに反応するUIImageViewインスタンスを作ります。

[code]

    #import "ViewController.h"
    
    @interface ViewController ()
    
    // タップに反応するイメージビュー
    @property (weak, nonatomic) IBOutlet UIImageView *imageView;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        // UItapGestureRecognizerインスタンスを作成し、イメージビューに組みこむ。 
        UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(imageTap:)];
        [self.imageView addGestureRecognizer: tapGestureRecognizer];
    }
    
    // イメージビューをタップしたら呼び出される、アクションメソッド。
    - (void)imageTap: (UITapGestureRecognizer *)recognizer {
        NSLog(@"Image View was tapped.");
    }
    
    @end
    
[/code]

同様の組み込みは、UILabelにもできます。


CC BY-SA 3.0
2015-03-11T02:43:49.087
7751
2015-03-11T07:32:38.390
2015-03-11T07:32:38.390
7362
7362
7748
answer