【问题标题】:Cant move UIScrollView that has buttons in it when pressing and dragging the buttons按下并拖动按钮时无法移动其中包含按钮的 UIScrollView
【发布时间】:2013-08-26 14:53:34
【问题描述】:

我有一个UIScrollView,里面有按钮,当我试图按下按钮并滑动到一边时,UIScrollView 不会移动,但当我快速滑动时它会移动。我在按钮上使用UIControlEventTouchUpInside。这是我用来向滚动视图添加按钮的代码:

-(void) setScrollView:(int) numberOfViews {
    for (int i = 0; i < numberOfViews; i++) {
        CGFloat xOrigin = i * 40;
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        [button addTarget:self
                   action:@selector(scrollViewButtonClicked:)
         forControlEvents:UIControlEventTouchUpInside];
        [button setTitle:[NSString stringWithFormat:@"%d",i] forState:UIControlStateNormal];
        button.frame = CGRectMake(xOrigin, 0, 40, 40);
        button.tag = 1000+i;
        button.backgroundColor = [self getColorForSound:self.sounds[i]];
        [button setExclusiveTouch:YES];
        [self.soundsScrollView addSubview:button];
}
}

即使用户按下按钮并尝试滚动,我怎样才能使 UIScrollView 滚动?

【问题讨论】:

  • 您是否尝试过在按钮内部使用触摸拖动? touch up 可以触发当前动作,touch drag 可以做你想做的事情。
  • @calvinBhai 这不起作用。我需要将它滚动到一边,这无济于事。
  • @Amar 将 Cancelable Content Touches 设置为 yes 的答案对我不起作用。
  • @BlueGene 另外,请检查已接受答案的 cmets 中给出的链接。

标签: ios objective-c uiscrollview


【解决方案1】:

这是设计使然。从概念上讲,只有一个视图应该处理触摸事件。当您触摸按钮时,仅处理与按钮相关的处理(例如,按钮按下)。按钮和滚动视图不能同时处理触摸事件。一旦您在按钮中启动触摸事件,该按钮“拥有”该触摸,因此滚动视图不会处理它。

当您滑动“非常快”时滚动视图确实移动的原因是您的滚动视图首先检查触摸事件,因为它是按钮的父视图。如果触摸事件没有“移动”,它会将其传递给子视图,在这种情况下是您的按钮,以查看它们是否可以处理它。但是,如果滚动视图在按钮有机会处理触摸事件之前检测到触摸正在移动,那么滚动视图将获得触摸事件的所有权并处理它以进行滚动。

【讨论】:

  • 问题是当我在 iPhone 上运行应用程序并滑动手指时它会正常工作,而它在模拟器中无法正常工作的原因是因为我使用鼠标并按下或将它在 iPhone 中保持这种方式?
猜你喜欢
  • 1970-01-01
  • 2012-12-02
  • 2016-05-07
  • 2012-05-14
  • 1970-01-01
  • 2016-02-27
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多