2011-05-13 68 views
6

我知道在Stack上有類似的帖子,但沒有發現幫助我找到解決方案。UIButton將忽略「拖動」並將其傳遞給UIScrollView

  • 我有一個滾動視圖加入的UIView
  • 我添加了一個UIButton相同的UIView上方的滾動視圖

    1. 我想讓UIButton響應touchUp並觸發事件。
    2. 如果有人在UIButton上拖動我希望它將事件傳遞給scrollView並拖動UIScrollView而不觸發按鈕事件。

我知道如何通過與返回則hitTest滾動視圖觸摸但這停止任何獲得到的UIButton。

不要想要將UIButton添加到UIScrollView。

有沒有人有建議的解決方案?

回答

0

this answer所述,作爲滾動視圖的子視圖的UIButton或其他UIControl將自動響應點擊,同時讓滾動視圖處理拖動。然而,作爲滾動視圖的子視圖的按鈕也將隨滾動內容一起移動,而不是保持在屏幕上的相同位置,因爲內容在它們下面滾動。我認爲這就是爲什麼你不想把按鈕放到滾動視圖中。

如果是這種情況,您可以通過多一步來獲得所需的行爲。將所有按鈕放入作爲滾動視圖的子視圖的UIView中,然後在滾動視圖委託的scrollViewDidScroll方法中,將該視圖的frame.origin設置爲滾動視圖的contentOffset。我剛剛在我的應用中實現了這個功能,並且它工作得很好,無需做任何子類化或參與響應者鏈或觸摸事件。

1

試試這個:

  1. 添加一個透明的,自定義的UIView大如整個滾動視圖contentSize滾動視圖,在所有其他視圖。 (或者,也可以使其與滾動視圖的寬度/高度一樣大,並且每當滾動視圖移動時簡單地移動它。)當滾動視圖決定將其觸摸傳遞給其子視圖而不是拖動時,這將是第一件事hitTested。
  2. 重寫UIView的hitTest方法。檢查觸摸是否在您的按鈕框架內。如果是,返回按鈕;如果不是,則返回零。

實際上,您會欺騙滾動視圖,認爲該按鈕是其子視圖之一。我不確定這會起作用,因爲我沒有真正嘗試過,但它看起來完全合理。

+0

我試過了,但無法使它工作。問題是無論您是滑動滾動視圖還是點擊它,都會在視圖上調用hitTest,因此自定義hitTest方法不知道是將事件傳遞給滾動視圖,還是將其重定向到按鈕。我也嘗試在自定義視圖中使用touchesMoved來計算它是接受一個觸摸還是一個水龍頭,但是到時候touchesMove被調用,hitTest方法完成了,所以沒有辦法在那裏有條件地做出響應。 – arlomedia 2011-07-27 21:37:39

1

嘗試將UIPanGestureRecognizer添加到UIBUtton。在您指定處理平移(拖動)的回調中,您無需執行任何操作。然後,將cancelsTouchesInView設置爲YES。這將導致您的按鈕將拖動手勢傳遞給其他視圖。

 
     UIPanGestureRecognizer *gr = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan)]; 
     [gr setCancelsTouchesInView:YES]; 
     [myButton addGestureRecognizer:gr]; 
     [gr release]; 

而這裏的handlePan

 
-(void)handlePan 
{ 
    // Do nothing 
} 

我遇到類似的情況,我有一個UIScrollView有兩個UIView子視圖。每個UIView包含一個UISlider。我想要捕捉(並放下)垂直拖動(這是手勢識別器進入的地方),但我還需要水平滾動以像預期的那樣在滑動條中工作,並左右平移滾動視圖。這是解決方案。 (手勢識別器連接到每個UIView。)

+0

沒有爲我工作,雖然我的設置稍有不同。而不是一個scrollView,我只是有一個viewController有幾個視圖可以拖動。我的問題是,其中一些子視圖有按鈕(因爲他們反應輕拍),並按鈕阻止拖動行爲。我是 - 認爲這個答案可以解決它,但是,唉,不。 :\任何額外的提示將不勝感激。謝謝! – Olie 2015-06-13 17:46:52

+0

爲了澄清,我也嘗試將'gr'複製到包含按鈕的littler子視圖上,希望能夠將pan一直傳遞到superview。沒有快樂。 – Olie 2015-06-13 18:01:17

1

試試這個:子類化UIScrollView,在touchesShouldCancelInContentView:方法中返回YES。

+0

適合我!非常感謝你 ! :] – Jerome 2016-10-12 23:49:40

相關問題