UIButton传递轻触和滚动手势到UIScrollView

时间:2014-08-06 12:10:56

标签: ios objective-c cocoa-touch uiscrollview uibutton

我有一个水平分页UIScrollViewUIButton部分覆盖了滚动视图。

像这样:

UIView
|
|- UIScrollView
|
|- UIButton

我想让UIButton不要触发点按滚动并重新按下按钮(我希望UIScrollView代替滚动) 。我希望按钮仅响应轻触和释放 - 不移动

这可以轻松快速地完成吗?或者我应该继承UIButton并覆盖-touchesBegan:等,以便在适当时手动将触摸传递给scrollView

2 个答案:

答案 0 :(得分:0)

好的,试试这个。这会将按钮上的点击识别器设置为等待点击结束,然后测试触摸是否在UIButton中结束。

UIButton * btn;
UITapGestureRecognizer * getTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(methodToPerformOnTap:)];
[btn addGestureRecognizer:getTap];

-(void) methodToPerformOnTap:(UITapGestureRecognizer *)sender {
    if ([sender state] == UIGestureRecognizerStateEnded)
    {
        CGPoint point = [sender locationInView:btn];
        if ( CGRectContainsPoint(btn.bounds, point) ) {

            // Point lies inside the bounds. HANDLE BUTTON TAP HERE.

        }
    }
}

答案 1 :(得分:0)

经过一些额外的研究后,我找到了合理的解决方案。这里的问题是UIScrollViewUIButton不在同一响应者层次结构中:两者的下一个响应者是父UIView,所以他们不发送事件到相互默认。

解决方案是子类UIButton并实现

- (UIResponder *)nextResponder

方法,以便返回UIScrollView


另一种解决方案是让UIButton成为UIScrollView的孩子。但是,如果您想将按钮保持在固定位置而不管单元格滚动,那么这种方法并不好用。


有点烦人的是,没有更简单的方法可以做到这一点。 : - )