早上好,
我创建了一个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中的那个没有被触发,但我需要两个。
任何解决方案?
提前感谢您的回答。
答案 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
}
}
}