2010-04-06 46 views
2

我在UIScrollView中有一個視圖,當用戶按下某個區域時會加載一個附加子視圖。當這個附加的子視圖可見時,我希望所有的觸摸事件都由此處理 - 而不是滾動視圖。將觸摸事件傳遞給子視圖

看起來好像第一對夫婦的事件正在被子視圖處理,但接着調用touchesCancelled並且滾動視圖接管了觸摸檢測。

只要在該視圖上執行移動活動,我怎樣才能確保子視圖獲取所有事件?

這是我在touchesMoved實施 - 而且我認爲他會做的工作......

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[touches allObjects] objectAtIndex:0]; 
    CGPoint touchPt = [touch locationInView:self]; 

    UIView *hitView = [self hitTest:touchPt withEvent:event]; 
    UIView *mySubView = subviewCtrl.view; 

    if(hitView == mySubView) { 
     [subviewCtrl.view touchesMoved:touches withEvent:event]; 
    } 
    else { 
     NSLog(@"Outside of view..."); 
    } 
} 

回答

1

響應鏈層次從子視圖「正常」變爲上海華盈,所以你不應該需要做的hitTest在你的超級視圖中。你遇到的問題不是你需要superview來調用子視圖上的touchesMoved,而是UIScrollView通過攔截觸摸事件來顛覆正常的響應者鏈層次結構,以便爲用戶提供平滑的滾動體驗。

[scrollView setDelaysContentTouches:NO]; 

注意,這將確保您的子視圖具有善於處理問題的事件第一次破裂:如果你不希望這種行爲,那麼你可以通過發送以下消息禁用了滾動此行爲(只要它實際上是第一響應者)。這可能會對scrollView的滾動和縮放性能產生負面影響,然而,這可能是蘋果默認將其設置爲YES的原因。

相關問題