22

ここで何かが足りないかもしれませんが...

私にはUIView数人の子供がいます(数人UILabelのとUIImageView)。ユーザーが親内の任意の場所(またはその子のUIView一部)をクリック(タップ)したときにイベントをキャッチする必要があります。UIView

これを行うための最良の方法は何ですか?

4

5 に答える 5

54

Identity InspectorでUIViewのクラスを変更できます...それUIControlを作成してから、ビューのイベントを追加しUITouchUpInsideて、ビューのタップをキャッチできます。

幸運を!

編集:スクリーンショットのステップバイステップは次のとおりです。

景色... 元のビュー-タイプUIView

...もちろん、イベントはありません。 UIViewには使用できるイベントはありません

戻って、UIControlを使用してUIViewを変更します... UIViewをUIControlに変更します

タダー!イベント! UIControlを使用すると、イベントを使用できます

メソッドをUITouchUpInsideイベントにフックします UITouchUpInsideのイベントを追加します

これは、インターフェイスファイルでどのように表示されるかを示しています メソッドのインターフェース

これは、実装ファイルでどのように表示されるかを示しています(もちろん、ログを必要なものに置き換えることができます) メソッドの実装

于 2012-05-24T07:36:39.390 に答える
8

親ビューのジェスチャ認識機能を使用し、子供が独自のジェスチャ認識機能を持たないようにすることで、この動作を装うことができます。UIViewこれを行うには、タップをリッスンするジェスチャ認識機能を親に追加します。parentView子ビュー(UILabels/ UIImageView)の包含ビューはどこにあり、handleTapによって実装されるメソッドは次のparentViewようになります。

UIGestureRecognizer *tapParent = [[UITapGestureRecognizer alloc]initWithTarget:parentView action:@selector(handleTap)];
[parentView addGestureRecognizer:tapParent];
[tapParent release];

子ビューには独自のジェスチャ認識機能がないため、ジェスチャを「食べる」ことはなく、その範囲内でタップしている限り、親ビューは応答します。

于 2012-05-23T23:24:33.710 に答える
1

複数のオプションがあるため、もう少し詳細を説明する必要があります。

通常のタップが必要な場合は、標準のタッチイベントの1つをキャッチして、どのサブビューがイベントを取得したかを確認できます。このようなもの:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    if(touch.view != self.mySubViewOfInterest)
    {
        // perform my actions
    }
}

複雑なジェスチャ認識が必要な場合は、UIGestureRecognizerのいずれかを使用して、サブビューまたはメインビューに割り当てることができます。

とにかく、すべてのサブビュー(イベントをキャッチするサブビュー)でユーザーインタラクションを有効にする必要があることに注意する必要があります。そうしないと、メインビューでサブビューのイベントもキャプチャされ、何を理解せずにデバッグとデバッグが行われることになります。起こっている。

于 2012-05-23T23:24:18.697 に答える
1

これは私のために働く

スウィフト3

 let gesture = UITapGestureRecognizer(target: self, action: selector(self.customViewClick))
withSender: self)
 customView.addGestureRecognizer(gesture)


 func customViewClick()  {
     print("custom view clicked!")
    }
于 2017-04-13T14:19:01.447 に答える
1

スウィフト4:

let clickGesture = UITapGestureRecognizer(target: self, action:  #selector(self.onUiViewClick))
uiView.addGestureRecognizer(clickGesture)

 @objc func onUiViewClick(sender : UITapGestureRecognizer) {

    }
于 2019-02-16T00:46:09.103 に答える