【问题标题】:UIButton pass-through tap-and-scroll gesture to UIScrollViewUIButton 通过点击和滚动手势到 UIScrollView
【发布时间】:2014-09-29 08:52:40
【问题描述】:

我有一个水平分页 UIScrollView 和一个 UIButton 部分覆盖滚动视图。

像这样:

UIView
|
|- UIScrollView
|
|- UIButton

我想让UIButton 不触发tap-scroll-and-relase-above-the-button(我希望UIScrollView 改为滚动)。我希望按钮只响应点击并释放而不移动

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

【问题讨论】:

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


    【解决方案1】:

    好吧,试试这个。这会将按钮上的点击识别器设置为等到点击结束,然后测试触摸是否在 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.
    
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

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

      解决方案是继承 UIButton 并实现

      - (UIResponder *)nextResponder
      

      方法使其返回UIScrollView


      另一种解决方案是使UIButton 成为UIScrollView 的子代。但是,如果您想将按钮保持在固定位置而不考虑单元格滚动,则效果不佳。


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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多