1

我有主wiev。我放置了一个 UIScrollView 对象作为主视图的子视图。我有一个来自 UIView 的扩展类,它管理触摸事件。此类模拟一种透明黑板,用户可以在其中绘制路径。我从 UIVIew 扩展类中创建了一个对象,并将其添加为 UIScrollView 的子视图。

我通过使用 Inspector 和 .xib 文件来执行此过程。

然后,没有触摸事件到达 UIScrollView 对象。无论我是否在检查器中取消选中我的 UIView 扩展类的“​​启用用户交互”复选框。我也尝试过:

[[self nextResponder] touchesBegan:touches withevent:event];

或者

[[self.superview nextResponder] touchesBegan:touches withevent:event];

或者

 [super touchesBegan:touches withEvent:event];

或者

[super touchesBegan:touches withEvent:event];

在我的扩展 UIView 类的 touchEvents 方法中。我还没有成功地将触摸事件传递给 UIScrollView。

另一方面,如果我以编程方式添加 scrollView 和我的扩展 UIView 类,保持相同的层次结构,UIScrollView 获取触摸事件,但不是它的子视图(我的 UIView 扩展类)。

我不希望 UIScrollView 和我的 UIView 扩展类同时管理触摸事件。我只想在 UIScrollView 和我的 UIView 扩展类之间切换以收听触摸事件,例如使用按钮。

在这种情况下,我正在解释,是否有可能选择哪个 UIScrollView 或我的 UIView 扩展类应该监听触摸事件?

4

2 回答 2

1

UIScrollView 有一个scrollEnabled属性。如果将此设置为YES,则滚动视图将是可滚动的。如果没有,事件将被转发到响应者链上。因此,尝试更改该属性。

阅读UIScrollView的文档!

至于在 nib 中设置与 XCode 之间的区别,您的代码设置和您的 nib 版本与某些重要方式并不完全匹配。我看不到您的笔尖或程序化设置,因此无法为您提供更多帮助。

于 2011-03-09T13:21:50.297 回答
0

您需要为滚动视图启用用户交互:

[self.scrollView setUserInteractionEnabled:YES];

将手势识别器添加到子视图:

for (int i = 0; i < pos.count; i++) {
        SCVerticalBarsChartBarView *bar = [[SCVerticalBarsChartBarView alloc]initWithBlaBlaBla];
        [bar addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(someAction:)]];
        bar.tag = i;
        [self.scrollView addSubview:bar];            
    }

并检测被点击的视图:

-(void)someAction:(UITapGestureRecognizer *)recognizer {
    if (recognizer.state == UIGestureRecognizerStateEnded) {
    if ([recognizer.view isKindOfClass:[SCVerticalBarsChartBarView class]]) {
        SCVerticalBarsChartBarView *tmpButt=(SCVerticalBarsChartBarView *)recognizer.view;
        NSLog(@"%d", tmpButt.tag);
    }
  }
}
于 2013-07-31T01:32:10.157 回答