UIScrollview和子视图触摸事件管理

时间:2011-03-09 12:26:05

标签: iphone cocoa-touch uiscrollview touch-event

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

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

然后,没有触摸事件到达UIScrollView对象。无论我是否在Inspector中取消选中我的UIView扩展类的“​​User Interaction Enabled”复选框。 我也尝试过:

[[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类,维护相同的层次结构,UIScrolView获取触摸事件,但不是它的子视图(我的UIView扩展类)。

我不希望UIScrollView和我的UIView扩展类同时管理触摸事件。我只想在UIScrollView和我的UIView扩展类之间切换,以便通过使用按钮来监听触摸大小。

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

2 个答案:

答案 0 :(得分:1)

UIScrollView具有scrollEnabled属性。如果将其设置为YES,则滚动视图将可滚动。如果没有,事件将被转发到响应者链。所以尝试改变那个属性。

阅读UIScrollView的docs

至于在笔尖设置与XCode之间的区别,你的代码设置和你的笔尖版本在一些重要方面并不完全匹配。我无法看到你的笔尖或你的程序化设置,因此无法帮助你。

答案 1 :(得分:0)

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

[self.scrollView setUserInteractionEnabled:YES];

将gestureRecognizer添加到子视图:

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);
    }
  }
}