簡體   English   中英

iPhone-UIScroller中的UIView…視圖未將觸摸傳遞給父級

[英]iPhone - UIView inside UIScroller… view not passing touches to parent

我在UIScroller中有一個UIView(叫它myView)。

myView具有可以拖動的元素。

當觸摸這些元素之一時,滾動條將被鎖定,以防止整個滾動。 元素具有ExclusiveTouch = YES。 我只需要觸摸myView就可以滾動整個內容。

我曾使用touchesBegan,touchesMoved等進行此操作,但是我正在將此類轉換為手勢。 新類具有兩個手勢:UIPanGestureRecognizer和UITapGestureRecognizer。 就像是:

 UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] 
           initWithTarget:self action:@selector(drag:)];
 [panGesture setMaximumNumberOfTouches:1];
 [panGesture setDelegate:self];
 [myView addGestureRecognizer:panGesture];
 [panGesture release];


 UITapGestureRecognizer *singleTap =  [[UITapGestureRecognizer alloc] 
                initWithTarget:self 
                action:@selector(tapAdd:)];
 [singleTap setDelegate:self];
 [singleTap setNumberOfTapsRequired:1];
 [myView addGestureRecognizer:singleTap];
 [singleTap release];

當此類使用舊方法(touchesBegan等)時,我只是使用類似

[self.nextResponder touchesBegan: touches withEvent:event]; 

但是我該如何使用手勢呢? 我的意思是,在我的情況下,UIPanGestureRecognizer將運行一個名為drag的方法,並且該方法接收到一個手勢...我如何將觸摸轉發給它的滾動父,以便整個滾動?

謝謝

您可能會設置一個協議來代表您的視圖。

在標題中,設置

@protocol MyViewDelegate
- (void)drag;
@end

@interface ....... {
    id <MyViewDelegate> delegate;
}
@property (nonatomic, assign) id delegate;
@end

您必須在實現文件中合成delegate 在滾動器類中,您將必須使用協議

@interface Scroller ....... <MyViewDelegate> {

在該實現文件中,確保放入myView.delegate = self; 初始化時添加- (void)drag {然后在其中執行所需操作。 如果您需要更多信息,則當然可以將協議中的方法設置為- (void)dragWithEvent:(UIEvent *)event東西。

然后,在myView中調用drag:時,可以通過調用[self.delegate dragWithEvent:event];將其轉發到協議方法[self.delegate dragWithEvent:event];

我知道,這可以使您的滾動條滾動一些,但是它會根據您的需要轉發消息。

也可以將手勢添加到滾動條而不是myView,然后轉發touchesBegan方法中的所有觸摸並讓滾動條直接處理

暫無
暫無

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

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