2013-07-07 45 views
0

我有一些子視圖的滾動視圖作爲圖塊。 scrollview將其「延遲內容接觸」和「可取消內容接觸」設置爲YES。
我用touchesBegan,touchesEndedtouchesMoved在每個子視圖中捕捉觸摸。如何在觸摸子視圖時取消滾動

當您點擊一個按鈕並立即開始滾動時,該按鈕會高亮顯示,並且滾動視圖不會滾動,而不需要任何代碼。

當我做完全一樣的東西沒有改變任何東西,觸摸視圖,但在按鈕外,觸發這些觸摸方法,但滾動視圖滾動。

在這些觸摸方法中,如果在按鈕外部完成觸摸以取消滾動視圖滾動的相同行爲,可以取消滾動嗎?

回答

0

如果你想檢測裏面任何的UIScrollView的子視圖的觸摸,你將不得不繼承的UIScrollView並重寫這是專門爲此創建的touchesShouldBegin和touchesShouldCancelInContentView方法。

除此之外,您無法識別子視圖中的觸摸,因爲UIScrollView往往處理所有觸摸本身,並且不會將它們傳遞給子視圖。

禮貌: - https://stackoverflow.com/a/392562/1865424

如果您有任何關於this.Happy任何進一步的問題來幫助你。

+0

,因爲我沒有做什麼特別的東西與我的UIScrollView,甚至停用我可能已經添加了手勢,我可以在我的子視圖導管的接觸是不正確的。問題是,當它們被捕獲時,UIScollView仍然處理滾動,而不是觸及子UIButton時會發生什麼。 – Oliver

0

取決於你正在嘗試做的,也許你可以添加:

UILongPressGestureRecognizer *longPressDetect = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(disableScrolling:)]; 

[subView addGestureRecognizer:longPressDetect]; 

,然後添加禁用和滾動重新啓用了滾動的方法,如:

-(void)disableScrolling:(UILongPressGestureRecognizer*)longPress { 

    if (gesture.state == UIGestureRecognizerStateBegan) { 
     scrollView.scrollEnabled = NO; 
    } 

    if (gesture.state == UIGestureRecognizerStateEnded) { 
     scrollView.scrollEnabled = YES; 
    } 
} 
+0

謝謝,但這只是一個竅門,這不是我的例子中所示的UIButton所必需的。我只是想用我的可觸摸的UIView做什麼是由UIButton阻止滾動。 – Oliver

1

我解決了這個問題,在觸摸被子視圖捕獲時在touchesBegan和touchesEnded中添加此代碼。

UIView* superView = self.view.superview; 
while (superView != nil) { 
    if ([superView isKindOfClass:[UIScrollView class]]) { 
     UIScrollView* superScroll = (UIScrollView*)superView; 
     superScroll.scrollEnabled = YES/NO; // put the right value depending on the touch method you are in 
    } 

    superView = superView.superview; 
} 
相關問題