按下并拖动按钮时,无法移动包含按钮的UIScrollView

时间:2013-08-26 06:27:47

标签: ios objective-c uiscrollview

我有一个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滚动?

1 个答案:

答案 0 :(得分:0)

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

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