3

我正在尝试使滚动视图只能在某个区域上滚动。为此,我将 UIScrollView 子类化并覆盖 touchesBegan(类似于这个问题)。

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

。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 通常不消耗的触摸(如点击)。知道如何拦截所有的触摸吗?

我想我在某处遗漏了一个概念。

4

2 回答 2

5

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

因此,也许您需要查看那些手势识别器和手势识别器委托,看看是否有更好的地方可以挂钩。

PS 手势识别器将在识别正在进行的手势后自动开始吞咽事件。

于 2012-03-02T02:41:04.127 回答
1

如果框架大小大于内容大小,您的 touches started 方法可能不会触发。

由于它仅适用于点击,我的猜测是滚动视图的内容大小设置不正确。

于 2012-03-02T00:18:30.803 回答