UIScrollView子类从不接收用于滑动的touchesBegan消息

时间:2012-03-01 20:23:54

标签: ios uiscrollview touchesbegan

我试图使滚动视图仅在某个区域上滚动。为此,我将UIScrollView子类化并覆盖touchesBegan(类似于this question)。

这是我(非常简单)的代码。

·H

 @interface SuppressableScrollView : UIScrollView
 @end

的.m

#import "SuppressableScrollView.h"

@implementation SuppressableScrollView

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"touchesBegan touches=%@ event=%@", touches, event);
    [super touchesBegan:touches withEvent:event];
}

@end

touchesBegan仅被调用UIScrollView通常不会消耗的触摸(如点击)。知道怎么拦截所有的触摸?

我想我在某个地方错过了一个概念。

2 个答案:

答案 0 :(得分:5)

我最近在为UITableViews寻找类似的东西。 UITableView是UIScrollView的扩展。在内部挖掘时,我发现有8个手势识别器连接到UIScrollView来拾取滑动和其他东西。我建议转储手势识别器属性,以查看是否有任何自动创建(我认为它们是)。在这种情况下,我能想到的唯一选择是删除它们,但滚动视图不会响应手势。

所以也许您需要查看那些手势识别器和手势识别器代表,您可以使用它们来查看是否有更好的地方可以连接。

P.S。一旦识别出正在进行的手势,手势识别器将自动开始吞咽事件。

答案 1 :(得分:1)

如果框架尺寸大于内容尺寸,则触摸开始方法可能无法触发。

由于它只适用于水龙头,我的猜测是滚动视图的内容大小设置不正确。