触摸某些元素时 UIScrollView 不滚动

Posted

技术标签:

【中文标题】触摸某些元素时 UIScrollView 不滚动【英文标题】:UIScrollView not scrolling when touching some elements 【发布时间】:2014-10-23 13:53:53 【问题描述】:

我有一个带有 Autolayout 的 UIScrollView,上面有几个元素。问题是当我尝试滚动触摸某些元素时没有任何反应,但是当我尝试滚动触摸其他一些元素时,滚动效果很好。

UIScrollView 有几个 UIViews,里面有 UITextfields 和 UIButtons。

似乎触摸事件或滚动事件并没有被发送到父 UIScrollView,而只是针对某些视图。

有什么想法吗?

【问题讨论】:

请发截图或一些代码 为什么不用UITableView 而不是UIScrollView?在这种情况下,您无需担心滚动。 【参考方案1】:

UIScrollView 有一个方法-(BOOL)touchesShouldCancelInContentView:(UIView *)view,如果视图不是UIControl 对象,默认返回YES;否则,它返回 NO。因此,如果您想在触摸UIControl 对象时启用滚动,您应该从UIScrollView 继承并覆盖touchesShouldCancelInContentView: 以始终返回YES:

@interface MYScrollView : UIScrollView

@end

@implementation MYScrollView

- (BOOL)touchesShouldCancelInContentView:(UIView *)view

    return YES;


@end

【讨论】:

确实,我的朋友,在视图层次结构中的某个地方有一个不是 UIControl 的视图并且禁用了滚动。 UIScrollView 的子类化解决了这个问题!

以上是关于触摸某些元素时 UIScrollView 不滚动的主要内容,如果未能解决你的问题,请参考以下文章

防止重叠的 UIScrollView 滚动

滚动视图在触摸并按住然后滑动时不滚动

uisegmentedcontrol 未检测到某些段上的触摸

触摸时暂停 UIScrollView 的滚动

UIScrollView:仅在允许时滚动

UIScrollView 需要触摸才能滚动