0

私が知りたいのは、ユーザーがモーダル ダイアログの外をタップしたことを認識する方法だけです。これを試しましたが、ユーザーが外側をタップしても呼び出されません。

これは、ModalDialogViewController.m ファイル UITapGestureRecognizer *recognizer; にある私の viewDidLoad メソッドです。

        if(![self.view.window.gestureRecognizers containsObject:recognizer])
        {
            recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapBehind:)];
            //[recognizer setDelegate:self];
            [recognizer setNumberOfTapsRequired:1];
            recognizer.cancelsTouchesInView = NO; //So the user can still interact with controls in the modal view
            [self.view.window addGestureRecognizer:recognizer];

        }

これは handleTapBehind メソッドを開いているわけではありません。

モーダル ビュー コントローラーを UIGestureRecognition のプロトコルにしました。

4

2 に答える 2

3

ここで少し遅れましたが、誰かが Google 経由でここに来た場合に備えて:

ジェスチャ レコグナイザーの設定は、ビューが表示された後に行う必要があります。viewDidLoad メソッドの呼び出し中、ビューのウィンドウは nil であるため、ジェスチャ レコグナイザーは追加されません。

メソッド呼び出しを viewDidAppear に配置すると、期待どおりに動作するはずです。

于 2013-07-30T22:08:35.900 に答える
0

.h ファイルに UIGestureRecognizerDelegate を設定しましたか?

Apple docで UIGestureRecognition の動作の完全な情報を取得できます

UIGestureRecognizers の使用は非常に簡単です。次の手順を実行するだけです: ジェスチャ認識エンジンを作成します。ジェスチャ レコグナイザーを作成するときは、コールバック メソッドを指定して、ジェスチャの開始、変更、または終了時にジェスチャ レコグナイザーが更新を送信できるようにします。

ジェスチャ レコグナイザーをビューに追加します。各ジェスチャ レコグナイザーは、1 つの (そして 1 つのみの) ビューに関連付けられています。そのビューの境界内でタッチが発生すると、ジェスチャ レコグナイザーは探しているタッチの種類と一致するかどうかを確認し、一致が見つかった場合はコールバック メソッドに通知します。

これら 2 つの手順はプログラムで実行できますが、ストーリーボード エディターを使用して視覚的にジェスチャ レコグナイザーを追加する方が簡単です。

完全なチュートリアルとここでの作業を参照してください

于 2013-04-08T08:53:14.823 に答える