0

我有一个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即使用户按下按钮并尝试滚动,我该如何进行滚动?

4

1 回答 1

0

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

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

于 2013-08-26T06:53:34.527 回答