簡體   English   中英

UIButton傳遞到UIScrollView的直擊式滾動手勢

[英]UIButton pass-through tap-and-scroll gesture to UIScrollView

我有一個水平分頁的UIScrollView其中的UIButton部分覆蓋了滾動視圖。

像這樣:

UIView
|
|- UIScrollView
|
|- UIButton

我想讓UIButton不在按鈕上的點擊滾動和釋放上方觸發(我想讓UIScrollView滾動)。 我希望按鈕僅響應點擊並釋放而不會移動

能簡單快速地做到嗎? 還是應該子類化UIButton並重寫-touchesBegan:等,以在適當的時候手動將觸摸傳遞給scrollView

經過一些額外的研究,我找到了一個合理的解決方案。 這里的問題是UIScrollViewUIButton不在同一響應者鏈層次結構中:兩者的下一個響應者是父UIView ,因此默認情況下它們不會相互發送事件。

解決方案是UIButton並實現

- (UIResponder *)nextResponder

方法,以便它返回UIScrollView


另一種解決方案是使UIButton成為UIScrollView的子級。 但是,如果無論單元格滾動如何都希望將按鈕保持在固定位置,那將無法正常工作。


令人煩惱的是,沒有更簡單的方法可以做到這一點。 :-)

好吧,嘗試一下。 這會將按鈕上的點擊識別器設置為等待直到點擊結束,然后測試以查看UIButton中的觸摸是否結束。

UIButton * btn;
UITapGestureRecognizer * getTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(methodToPerformOnTap:)];
[btn addGestureRecognizer:getTap];

-(void) methodToPerformOnTap:(UITapGestureRecognizer *)sender {
    if ([sender state] == UIGestureRecognizerStateEnded)
    {
        CGPoint point = [sender locationInView:btn];
        if ( CGRectContainsPoint(btn.bounds, point) ) {

            // Point lies inside the bounds. HANDLE BUTTON TAP HERE.

        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM