2012-04-14 8 views
1

私はこのコードで遊んできましたが、それを正しく行うことはできません。UIButtonとUITapGestureRecognizerを持つUIScrollView

現在の動作:ボタンをタップしても、UIScrollViewで自由にスクロールできます。私はボタンではないものをタップすると、UITapGestureRecognizerの結果として(私が望むような)メソッドを呼び出します。しかし、私は数秒間ボタンを押したままにして、ボタンのUIControlEventTouchUpInsideをトリガーするためにそれに触れなければなりません。

私は何が起こりたいのですか:まったく同じですが、座っているビューで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]; 
} 

答えて

2

stavash としては、次の操作を行うことができます:

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

     return NO; 
    } 

    return YES; 
} 

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

希望します。

+0

これは上のコードと組み合わせると、UIButtonのすべての接触が直接的にそれを押すことを意味します。私はあなたがuiscrollview上でuibuttonsを持っているが、スクロールしているときにそれらに触れることは、直接効果を持っていないiPhoneの踏み台のようにこれを動作させたいと思います。 – Andrew

2

私はあなたの答えはUIGestureRecognizerDelegateの方法だと思います。

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

チェックタッチのビュープロパティは、あなたが避けるようにしようとしているUIButtonsのいずれかである場合:リターンそうならばNOであればYESを返します。 UITapGestureRecognizerのデリゲートを割り当てることを忘れないでください。お役に立てれば。提案

関連する問題