首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS UIScrollView clipToBounds =未检测到任何子视图

iOS UIScrollView clipToBounds =未检测到任何子视图
EN

Stack Overflow用户
提问于 2012-01-17 07:55:04
回答 4查看 4.4K关注 0票数 5

我有一个宽/高为256x256的滚动视图。我有在两个方向(左和右)拉伸的滚动视图的子视图。我将clipToBounds设置为NO,这样我就可以在滚动视图中看到项目。

当用户触摸滚动视图托架中的空间(超过256x256的区域)时,我检查hittest并返回scrollView。

我的问题是滚动视图上的项目是按钮,如果按钮不在256x256的内部,它就不会接收触摸事件。如何在滚动视图上的按钮之间循环,然后将事件转发到按钮?

我是这样做的Paging UIScrollView with peeking neighbor pages

但是我的滚动视图子视图没有接收事件。

我已经在我的视图中尝试了以下所有应该发送事件的方法,但我的按钮将不会接收这些事件。事件链总是停在我的UIScroll视图上-允许我滚动我的项目-但是我如何将事件从滚动视图转发到按钮呢?

代码语言:javascript
复制
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if ([self pointInside:point withEvent:event]) {
        return self.scrollView;
    }
    return nil;
}

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if ([self pointInside:point withEvent:event]) {
        return self.scrollView;
    }
    return nil;
}

- (UIView *) hitTest:(CGPoint) point withEvent:(UIEvent *)event {
    UIView* child = nil;

    if ((child = [super hitTest:point withEvent:event]) == self) {
        return self.scrollView;
    }
    return child;
}
EN

回答 4

Stack Overflow用户

发布于 2012-01-18 03:03:13

这是答案,也是更好的解决方案。而不是让任意的视图来转发事件,我们只需要在UIScrollView中这样做,所有的按钮和滑动都可以很好地工作。

代码语言:javascript
复制
- (UIView )hitTest:(CGPoint)point withEvent:(UIEvent )event {
    UIView *view = [super hitTest:point withEvent:event];
    for (UIView *subview in self.subviews) {
        if (view != nil && view.userInteractionEnabled) {
            break;
        }
        CGPoint newPoint = [self convertPoint:point toView:subview];
        view = [subview hitTest:newPoint withEvent:event];
    }
    return view;
}
票数 6
EN

Stack Overflow用户

发布于 2012-01-17 10:51:43

你是否覆盖了UIScrollView的hitTest?

代码语言:javascript
复制
- (UIView*)hitTest:(CGPoint)pt withEvent:(UIEvent*)event 
{
    UIView *contentView = [self.subviews count] ? [self.subviews objectAtIndex:0] : nil;
    return [contentView hitTest:pt withEvent:event];
}
票数 0
EN

Stack Overflow用户

发布于 2014-03-24 21:37:56

请参阅Matt Galloway的教程How To Use UIScrollView to Scroll and Zoom Content中的在滚动视图之外检测触摸部分-

将滚动视图设置为小于屏幕,并取消选中剪辑子视图:

并将其包装到容器视图中,该视图将事件转发到滚动视图:

代码语言:javascript
复制
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event {
    UIView *view = [super hitTest:point withEvent:event];
    if (view == self) {
        return _scrollView;
    }
    return view;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8887958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档