2011-04-15 83 views
6

早上好,檢測滾動在子類UIScrollView的

我已經創建的UIScrollView的子類,我現在想,當用戶在我的子類滾動就知道了。對於我實現它如下所示:

ImageScroller.h

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

    NSLog(@"did scroll"); 
} 

的問題是(在@implementation內)

@interface UIImageScroller : UIScrollView <UIScrollViewDelegate> { 

ImageScroller.m,該方法scrollViewDidScroll不似乎被解僱了。 有沒有可能讓它起作用?

我也嘗試設置委託給它自己,但它不起作用。

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

我添加了一個ScrollView到我的XIB文件,並設置類,如果它對我的ImageScroller。此外,我設置了Fileowner,並在ViewController的.h文件中使用UIScrollViewDelegate,並在.m文件中實現Method scrollViewDidScroll。

當我把我的ImageScroller的代表從XIB中的.m文件一樣 的代碼[imageScroller setDelegate:imageScroller] 的scrollViewDidScroll在我ImageScroller子類解僱,但一個在我的ViewController ISN沒有開火,但我需要兩個。

任何解決方案?

感謝您提前給出答案。

回答

4

我想你可以嘗試設置self.delegate = self;接收事件。

+1

我試了一下這樣的,但它並沒有出於某種原因。 ((self = [super initWithCoder:aDecoder])){ self.directionalLockEnabled = YES;(id)initWithCoder:(NSCoder *)aDecoder { [self setDelegate:self]; } return self; } – 2011-04-15 08:17:47

+0

我添加了一個ScrollView到我的XIB文件並將Class設置爲我的ImageScroller。我還設置了Fileowner,並且在ViewController的.h文件中使用UIScrollViewDelegate以及在.m文件中實現Method scrollViewDidScroll。這可能是一個問題嗎? – 2011-04-15 08:21:32

+0

我沒有得到它第一次:)所以你的委託方法工作,但只在你的委託(滾動視圖)?因爲只有一個代表,所以事情應該是這樣的。我認爲你可能會設置委託給你的控制器,然後讓它像這樣做 ' - (void)scrollViewDidScroll:(UIScrollView *)scrollView {//做爲控制器的東西 [self.view scrollViewDidScroll:(UIScrollView *) self.view]; } ' 但我還不確定這是否是問題所在。 – 2011-04-15 08:53:05

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方法,視圖控制器應負責處理那些在我看來。

1

如果有人正在尋找一個3雨燕的答案,它是如此簡單:

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