我已经覆盖了子类,它拒绝调用touchesShouldCancelInContentView。我发誓我以前写过代码来做这件事。我正在覆盖该类,以便某些视图不会将触摸事件传递给滚动视图。
上课
@interface SlidingWindowScrollView : UIScrollView
{
UIView* noTouchView;
}
@property (nonatomic, retain) UIView* noTouchView;
@end
实施
@implementation SlidingWindowScrollView
@synthesize noTouchView;
- (BOOL)touchesShouldCancelInContentView:(UIView *)view
{
BOOL shouldCancel = NO;
if(view == noTouchView)
shouldCancel = YES;
NSLog(@"shouldCancel %d", shouldCancel);
return shouldCancel;
}
@end
在xib中,我在其中抛出一个scrollview和一个uiview,并在VC视图中写入此内容。
scrollView.contentSize = CGSizeMake(scrollView.bounds.size.width*2,
scrollView.bounds.size.height);
scrollView.pagingEnabled = YES;
scrollView.canCancelContentTouches = YES;
contentView.frame = CGRectMake(scrollView.frame.size.width + 20,
0,
scrollView.frame.size.width,
scrollView.frame.size.height);
contentView.userInteractionEnabled = YES;
scrollView.noTouchView = contentView;
[scrollView setContentOffset:CGPointMake(scrollView.bounds.size.width, 0) animated:YES];
我不知道是什么给了。这应该是一个简单的覆盖。我确保自定义类在XIB中是正确的,并且出口都说它是我的UIScrollView的新子类。我不是故意放肆,而是在最新的iOS API中做了些什么?这似乎应该很容易但它从不调用函数touchesShouldCancelInContentView。我很困惑。我非常感谢有人可以证明我错了并且让这个函数被scrollView调用。我想应该注意的是,print语句确实打印了但是可以一致地完成
如果你能在你的机器上工作,请告诉我,因为我没有看到任何错误。这让我疯了@ _ @希望有人可以帮助我。感谢。
答案 0 :(得分:13)
从我所看到的,你没有得到touchesShouldCancelInContentView:或touchesShouldBegin:withEvent:inContentView:callbacks,除非你将delayedContentTouches设置为NO:
scrollView.delaysContentTouches = NO;
答案 1 :(得分:4)
我被困在这一段时间,你曾经读过这篇文章,你需要在触摸touchesShouldCancelInContentView
之前设置以下两个属性才会触发
scrollView.delaysContentTouches = NO;
scrollView.canCancelContentTouches = YES;
如果scrollView.delaysContentTouches = NO
scrollView.canCancelContentTouches = NO
才会触发