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

これは仕様によるものです。概念的には、1 つのビューだけがタッチ イベントを処理する必要があります。ボタンをタッチすると、ボタン関連の処理 (ボタンの押下など) のみが処理されます。タッチ イベントは、ボタンとスクロール ビューの両方で同時に処理することはできません。ボタンでタッチイベントを開始すると、ボタンはそのタッチを「所有」するため、スクロールビューはそれを処理できません。

「非常に速く」スライドするとスクロールビューが移動する理由は、スクロールビューがボタンの親ビューであるため、最初にタッチイベントを検査するためです。タッチイベントが「動いていない」場合、それをサブビュー (この場合はボタン) に渡して、処理できるかどうかを確認します。ただし、スクロール ビューが、ボタンがタッチ イベントを処理する前にタッチが移動していることを検出した場合、スクロール ビューはタッチ イベントの所有権を取得し、スクロールのために処理します。

于 2013-08-26T06:53:34.527 に答える