2

我找到了一些可以完全解决我的问题的答案,但似乎我错过了一些步骤。我只是想拦截 ScrollView 的“ViewDidBlablabla”事件,所以我创建了一个自定义 UIScrollView 类。

MyScrollView.m

#import "MyScrollView.h"

@implementation MyScrollView

- (id)initWithFrame:(CGRect)frame{
    NSLog(@"initWithFrame");
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

-(void)scrollViewWillBeginDragging:(UIScrollView*)scrollView{
    NSLog(@"scrollViewWillBeginDragging");
    //scrollView.contentOffset
}

-(void)scrollViewDidScroll:(UIScrollView*)scrollView{
    NSLog(@"scrollViewDidScroll");
}

-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{
    NSLog(@"scrollViewDidEndScrollingAnimation");
}

@end

MyScrollView.h

#import <UIKit/UIKit.h>

@interface MyScrollView : UIScrollView <UIScrollViewDelegate>

@end

当我分配我的自定义滚动视图时,我确实收到了控制台消息“initWithFrame”,但无法访问其他事件。我错过了什么?

如果您需要其他一些代码,请随时询问,但由于我使用了自定义的“initWithFrame”方法,我想错误应该在这里。

4

1 回答 1

4

尝试将您的视图设置为自身的代表:

if (self) {
    // Initialization code
    self.delegate = self;
}

从技术上讲,您不需要继承UIScrollView来响应滚动事件:将 设置delegate<UIScrollViewDelegate>.

此外,scrollViewDidEndScrollingAnimation:方法已经消失了大约两年,因此不会在现代 iOS 安装上调用它。

于 2012-05-01T15:30:37.173 回答