0

UIScrollView 内に UITextField と UIButton がいくつかあり、このスクロール ビューは UIViewController のビュー内にあります。表示されている場合にキーボードを閉じるタッチ ジェスチャ レコグナイザーを追加しました。

UITapGestureRecognizer *tapToDismissKeyboard = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewTapped:)];
    [tapToDismissKeyboard setCancelsTouchesInView:NO];
    tapToDismissKeyboard.delegate = self;
    [self.view addGestureRecognizer:tapToDismissKeyboard];

#pragma mark UITapGestureRecognizerDelegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if ([touch.view isDescendantOfView:self.signupButton_] || [touch.view isDescendantOfView:self.profilePictureImageView_] || [touch.view isDescendantOfView:self.signupUsingFacebook_]) {
        return NO; // ignore the touch
    }

    return YES; // handle the touch
}

問題は、サインイン/サインアップボタンをタップすると、実際にボタンのタッチが必要なタップジェスチャが検出されることです。

4

3 に答える 3

0

タッチされたビューはボタン自体であるべきです。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if (touch.view==self.signupButton_ ) {
        return NO; // ignore the touch
    }

    return YES; // handle the touch
}

あなたのために働くはずです、isDescendantOfViewそのビューはあなたがクリックしようとしているボタンであるため、falseを返します...同様に、任意のボタンを通過させたい場合は、行うことができます

if([v isKindOfClass:[UIButton class]])
{
    return  NO;  
}

役に立ったことを願っています

ダニエル

于 2012-10-11T20:52:12.950 に答える
0

そのビュー内にボタンをタッチしない場合は、ビュー全体にGesture Recognizerを追加します。そのビュー内にすべてのコンテンツを挿入し、そのビューのみにGesture Recognizerを追加し、ボタン用の別のビューを作成します。動作します。

于 2012-10-11T21:16:36.337 に答える
0

これを回避するには、ボタンにもジェスチャを設定し、コードを次のように配置します。

[tapToDismissKeyboard requireGestureRecognizerToFail:buttonTapGestureRecognizer];
于 2012-10-11T21:24:21.577 に答える