UIViewを持つカスタムクラスがあります。ビューがタップされたときにアクションを実行したい。私が追加するとき:
[(UIControl*)customClass addTarget:self
action:@selector(doAction:)
forControlEvents:UIControlEventAllTouchEvents];
ビューをクリックすると「doAction」が起動することがありますが、ほとんどは起動しません。しかし、追加すると次のことに気付きました。
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doAction:)];
[(UIControl*)customClass addGestureRecognizer:tapGesture];
これら 2 つのレコグナイザーの違いは何ですか? UIControl にはデリゲートと UIGestureRecognizer があることは知っていますが、コントロールが常にタッチをキャッチするとは限らない理由を理解できません。
問題は、gestureRecognizer の場合の送信者が間違っていることです。これは、そこからデータを取得できないためです。
- (void)doAction:(customClass*)sender {
switch (sender.actionType) { // do something ... } }
アクセス方法は?ブレークポイントに表示される構造は次のようになります。
sender -> UIGestureRecognizer -> _view -> _actionType