繁体   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