2

私はUIView追加した場所を持っていUITapGestureRecognizerます:

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected:)];
tapRecognizer.numberOfTapsRequired=1;
tapRecognizer.numberOfTouchesRequired=1;
[self.myView addGestureRecognizer:tapRecognizer];

UIToolBar次に、ビューにボタン付きを追加します。

UIToolbar *topBar = [[UIToolbar alloc ]initWithFrame:CGRectMake(0, 0, self.myView.frame.size.width, 44)];
topBar.barStyle = UIBarStyleBlackTranslucent;

UIBarButtonItem *logout = [[UIBarButtonItem alloc] initWithTitle:@"Logout" style:UIBarButtonItemStyleBordered target:self action:@selector(logout)];

[topBar setItems:@[logout] animated:NO];

ログアウト ボタンをクリックすると、ログアウト アクションの代わりにタップ認識機能が起動するという問題があります。クリックしたままにすると、ログアウト アクションが起動します (タップ認識機能が失敗していると推測しているため、ボタン アクションが起動します)。

ボタンが押されたときにジェスチャ認識エンジンを起動しないようにするにはどうすればよいですか?

4

3 に答える 3

4

ちょうど同じ問題がありました。コンテナー ビューを導入したくないためです (UIToolbar は既存のビューをカバーする必要があります)。Patrick.Ji のおおまかな指摘の助けを借りて、私はこれを思いつきました:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if ([touch.view.superview isKindOfClass:[UIToolbar class]]) {
        return NO;
    }
    return YES;
}

ジェスチャのデリゲートをに設定することを忘れないでくださいself

- (void)viewDidLoad {
    [super viewDidLoad];
    UITapGestureRecognizer *mainTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(mainTapGesture:)];
    mainTapGestureRecognizer.delegate = self;
    [self.view addGestureRecognizer:mainTapGestureRecognizer];
}
于 2013-02-19T05:12:11.833 に答える
0

タップ認識エンジンでビューを確認します。それがログアウト ボタンである場合は、 touch が を介してチェーンに渡されないようにしsuperます。

または、ツールバーがビューのサブビューでないことを確認してください。代わりに、ツールバーとコンテンツ ビューを含むコンテナー ビューを作成し、このコンテンツ ビューにジェスチャ レコグナイザーを追加します。

于 2012-12-20T18:20:36.550 に答える
-1

UIGestureRecognizer のこのデリゲート メソッドを実装します (tapRecognizer.delegate = self を設定することを忘れないでください)。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:   (UITouch *)touch {

    if ([touch.view isKindOfClass:[UIBarButtonItem class]]) 
    {
        return NO;
    }
    return YES;
}
于 2012-12-23T05:43:31.433 に答える