我有主要的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扩展类应该听触摸事件?
答案 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);
}
}
}