[英]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.