1

私はこのコードで遊んでいますが、正しく理解できません。

現在の動作:ボタンをタップしても、UIScrollViewを自由にスクロールできます。ボタンではないものをタップすると、UITapGestureRecognizerの結果として、メソッドが呼び出されます(必要に応じて)。ただし、ボタンを数秒間押し続けてからタッチアップして、ボタンのUIControlEventTouchUpInsideをトリガーする必要があります。

私がしたいこと:まったく同じですが、UIButtonが置かれているビューでUITapGestureRecognizerをオフにした場合のように、UIButtonに簡単に触れることができるようにします。

これが私のコードです:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

        //...

        [cell.xButton addTarget:self action:@selector(xButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

        self.delaysContentTouches = YES;

        UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
        [self addGestureRecognizer:tapGestureRecognizer];
        tapGestureRecognizer.delegate = self;
    }
}

- (void) handleTapFrom: (UITapGestureRecognizer *)recognizer
{
    [self.header removeKeyboard];
}
4

2 に答える 2

3

stavash示唆したように、次のことができます。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    UIView* touchedView = [touch view];
    if([touchedView isKindOfClass:[UIButton class]]) {

       return NO;
    }

    return YES;
}

これはほとんどの場合機能します。さらに、を使用して、タッチしたビューがスクロールビューの子孫であるかどうかを確認することもできますisDescendantOfView:

それが役に立てば幸い。

于 2012-04-14T13:39:41.783 に答える
2

あなたの答えはUIGestureRecognizerDelegateのメソッドだと思います。

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

タッチのviewプロパティが回避しようとしているUIButtonのいずれかであるかどうかを確認します。そうである場合は、NOを返し、そうでない場合はYESを返します。UITapGestureRecognizerのデリゲートを割り当てることを忘れないでください。お役に立てれば。

于 2012-04-14T13:32:46.753 に答える