![](/img/trans.png)
[英]How to conditionally “pass through” a gesture from a UIButton to a UIScrollView?
[英]UIButton pass-through tap-and-scroll gesture to UIScrollView
我有一個水平分頁的UIScrollView
其中的UIButton
部分覆蓋了滾動視圖。
像這樣:
UIView
|
|- UIScrollView
|
|- UIButton
我想讓UIButton
不在按鈕上的點擊滾動和釋放上方觸發(我想讓UIScrollView
滾動)。 我希望按鈕僅響應點擊並釋放而不會移動 。
能簡單快速地做到嗎? 還是應該子類化UIButton
並重寫-touchesBegan:
等,以在適當的時候手動將觸摸傳遞給scrollView
?
經過一些額外的研究,我找到了一個合理的解決方案。 這里的問題是UIScrollView
和UIButton
不在同一響應者鏈層次結構中:兩者的下一個響應者是父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.