【问题标题】:UIScrollview and subviews touch events managingUIScrollview 和子视图触摸事件管理
【发布时间】:2011-07-11 20:55:02
【问题描述】:

我有主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 扩展类应该监听触摸事件?

【问题讨论】:

    标签: iphone cocoa-touch uiscrollview touch-event


    【解决方案1】:

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

    阅读 docs 获取 UIScrollView!

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

    【讨论】:

    • 当然启用了UIScrollView scrollEnabled属性,还有“用户交互属性”和“多点触控”属性。但 UIScrollView 似乎没有收到任何事件。这就像扩展的 UIView 类对象(与 UIScrollView 对象具有相同的宽度和高度)正在消耗所有触摸事件。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-26
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多