簡體   English   中英

UIScrollview和子視圖觸摸事件管理

[英]UIScrollview and subviews touch events managing

我有主要的想法。 我已將UIScrollView對象放置為主視圖的子視圖。 我有一個來自UIView的擴展類,該類管理觸摸事件。 此類模擬了一種透明的黑板,用戶可以在其中繪制路徑。 我從UIVIew擴展類中創建了一個對象,並將其添加為UIScrollView的子視圖。

我使用Inspector和.xib文件執行此過程。

然后,沒有觸摸事件到達UIScrollView對象。 無論是否取消檢查器中我的UIView擴展類的“​​已啟用用戶交互”復選框。 我也嘗試過:

[[self nextResponder] touchesBegan:touches withevent:event];

要么

[[self.superview nextResponder] touchesBegan:touches withevent:event];

要么

 [super touchesBegan:touches withEvent:event];

要么

[super touchesBegan:touches withEvent:event];

在擴展的UIView類的touchEvents方法中。 我尚未成功將觸摸事件獲取到UIScrollView。

另一方面,如果我以編程方式添加scrollView和擴展的UIView類,並保持相同的層次結構,則UIScrolView會獲得觸摸事件,但不會獲得其子視圖(我的UIView擴展類)。

我不希望UIScrollView和UIView擴展類同時管理觸摸事件。 我只想在UIScrollView和我的UIView擴展類之間進行切換,例如通過使用按鈕來監聽觸摸屏。

在這種情況下,我正在解釋,是否可以選擇應該監聽觸摸事件的UIScrollView或我的UIView擴展類?

UIScrollView具有scrollEnabled屬性。 如果將其設置為YES ,則滾動視圖將是可滾動的。 否則,事件將轉發到響應者鏈。 因此,請嘗試更改該屬性。

閱讀UIScrollView的文檔

至於筆尖設置與XCode設置之間的區別,您的代碼設置和筆尖版本與某些重要方式並不完全匹配。 我看不到您的筆尖或編程設置,因此無法為您提供更多幫助。

您需要為滾動視圖啟用用戶交互:

[self.scrollView setUserInteractionEnabled:YES];

在子視圖中添加gestureRecognizer:

for (int i = 0; i < pos.count; i++) {
        SCVerticalBarsChartBarView *bar = [[SCVerticalBarsChartBarView alloc]initWithBlaBlaBla];
        [bar addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(someAction:)]];
        bar.tag = i;
        [self.scrollView addSubview:bar];            
    }

並檢測點擊的視圖:

-(void)someAction:(UITapGestureRecognizer *)recognizer {
    if (recognizer.state == UIGestureRecognizerStateEnded) {
    if ([recognizer.view isKindOfClass:[SCVerticalBarsChartBarView class]]) {
        SCVerticalBarsChartBarView *tmpButt=(SCVerticalBarsChartBarView *)recognizer.view;
        NSLog(@"%d", tmpButt.tag);
    }
  }
}

暫無
暫無

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

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