touchesShouldCancelInContentView未被调用

时间:2011-08-20 02:06:27

标签: objective-c ios uiscrollview

我已经覆盖了子类,它拒绝调用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语句确实打印了但是可以一致地完成

如果你能在你的机器上工作,请告诉我,因为我没有看到任何错误。这让我疯了@ _ @希望有人可以帮助我。感谢。

2 个答案:

答案 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才会触发