检测UIScrollView的子类中的滚动

时间:2011-04-15 08:06:36

标签: iphone uiscrollview subclass

早上好,

我创建了一个UIScrollView的子类,我现在想知道用户何时在我的子类中滚动。为此,我实现了如下:

ImageScroller.h

@interface UIImageScroller : UIScrollView <UIScrollViewDelegate> {

ImageScroller.m(在@implementation中)

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

    NSLog(@"did scroll");
}

问题是,方法scrollViewDidScroll似乎没有被触发。 是否有可能让它发挥作用?

我也尝试将委托设置为自己,但它不起作用。

 - (id)initWithCoder:(NSCoder *)aDecoder {
    if ((self = [super initWithCoder:aDecoder])) {
        self.directionalLockEnabled = YES;
        [self setDelegate:self];
    }
    return self;
}

我在我的XIB-File中添加了ScrollView,并将Class设置为我的ImageScroller。我还设置了Fileowner,我在ViewController的.h-File中使用了UIScrollViewDelegate,并在.m文件中实现了方法scrollViewDidScroll。

当我从XIB的.m文件的代码中设置我的ImageScroller的委托时     [imageScroller setDelegate:imageScroller] scrollViewDidScroll在我的ImageScroller-Subclass中触发,但我的ViewController中的那个没有被触发,但我需要两个。

任何解决方案?

提前感谢您的回答。

3 个答案:

答案 0 :(得分:13)

我遇到了同样的问题,创建了UIScrollView的子类,但是这样解决了它。如上所述,您可以将自己(子类实例)设置为委托,但这就是我所做的。

在子类中,我覆盖了以下方法

//Override this to detect when the user is scrolling, this is also triggered during view
//layout.  Here you can check your deceleration rate and determine when the scrolling has
//grinded to a halt.
-(void)setContentOffset:(CGPoint)contentOffset

//Override this to detect when the view has been resized (just a handy override)
-(void)setFrame:(CGRect)frame;

就其他UIScrollViewDelegate方法而言,View Controller应负责处理我认为的那些。

答案 1 :(得分:4)

我想你可以尝试设置self.delegate = self;接收活动。

答案 2 :(得分:2)

如果有人在寻找Swift 3的答案,那就简单了:

override var contentOffset: CGPoint {
    didSet {
        if contentOffset != oldValue {
            //same as scrollViewDidScroll
        }
    }
}