2013-08-26 119 views
0

我有一個UIScrollView其中有按鈕,當我試圖按下一個按鈕並滑動到一側時UIScrollView不動,但當我移動的速度非常快。我在按鈕上使用UIControlEventTouchUpInside。這是我使用按鈕添加到滾動視圖代碼:不能移動UIScrollView,當它按下並拖動按鈕

-(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滾動即使用戶按下按鈕並試圖滾動?

+0

您是否嘗試過使用Touch拖動按鈕?觸摸可以觸發當前動作,觸摸拖動可以做你想做的事情。 –

+0

@calvinBhai這不起作用。我需要將它滾動到一邊,這沒有幫助。 –

+0

可能重複[UIButton不允許UIScrollView滾動](http://stackoverflow.com/questions/5070135/uibutton-doesnt-allow-uiscrollview-to-scroll) – Amar

回答

0

這是設計。從概念上講,只有一個視圖應該處理觸摸事件。當您觸摸按鈕時,只處理與按鈕相關的處理(例如,按下按鈕)。觸摸事件不能同時被按鈕和滾動視圖處理。一旦你在一個按鈕中開始了一個觸摸事件,那麼觸摸的按鈕就會「擁有」,因此滾動視圖將無法處理它。

當你滑動「非常快」時,滾動視圖會移動的原因是因爲滾動視圖首先檢查觸摸事件,因爲它是按鈕的父視圖。如果觸摸事件不是「移動」,它會將其傳遞給子視圖,在這種情況下是按鈕,以查看它們是否可以處理它。但是,如果滾動視圖在按鈕有機會處理觸摸事件之前檢測到觸摸正在移動,那麼滾動視圖將取得觸摸事件的所有權並處理它進行滾動。

+0

這個問題是什麼,當我在iPhone上運行應用程序,並滑動我的手指它會正常工作,並且它在模擬器中無法正常工作的原因是因爲我使用鼠標並按或將它保持這種方式在iPhone? –