2010-03-03 28 views
1

這個問題的答案可能就在我的鼻子下面,但我沒有看到它。也許這裏有人可以幫忙。iPhone:如何確定哪個滾動視圖調用委託方法?

我有一個允許垂直滾動的scrollView。我把它:

[clefScrollView addSubview:clefView]; 
[clefScrollView setContentSize:CGSizeMake(clefView.frame.size.width, clefView.frame.size.height)]; 
clefScrollView.showsVerticalScrollIndicator = YES; 
clefScrollView.showsHorizontalScrollIndicator = NO; 
clefScrollView.delegate = self; 

我已經包含在同一個文件下面的方法,以支持UIScrollViewDelegate協議:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{ 
    NSLog(@"%f %f", scrollView.contentOffset.y, scrollView.contentSize.height); 
} 

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

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

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

此外,對於班裏的.h文件包括協議:

@interface ClefNotesViewController : UIViewController <UIActionSheetDelegate,UIScrollViewDelegate,DoneWithVCDelegate> { 

的問題是,不管是什麼,下面的兩個從來不被稱爲:

-scrollViewDidEndDecelerating 
    -scrollViewDidScroll 

其他兩種方法會響應不同的事件而被調用。考慮到兩個協議方法被調用,我認爲我已經正確地將委託設置爲我自己。那麼,問題是什麼?

謝謝!

更新:我發現這個問題,雖然還沒有想出如何解決它。我的班級跨越兩個文件。在第二個文件,不同的滾動視圖正在實施 -scrollViewDidEndDecelerating -scrollViewDidScroll

的問題是,我怎麼可以定義兩組不同的兩種不同方法UIScrollViews,在同一個班?

我可以嘗試使用相同的委託方法處理兩個scrollViews,但這很醜,因爲我無法使用scrollView的文件保留每個委託集。我也可以分裂我的班級。有另一種方法嗎?

回答

1

的問題是,我該如何定義兩個 套不同的方法有兩個 不同UIScrollViews,在同 類?

委託方法接受一個scrollview對象作爲它們的參數。您需要檢查哪個滾動視圖正在傳遞並作出相應的響應。您可以設置每個滾動視圖的標籤屬性以識別它們。

+0

是的,這確實工作,您需要爲它們分配一個標籤。我想,我認爲不經常發生的事情是能夠將每個scrollView的委託放在它自己的文件中,即使這兩個文件都是同一類的一部分。 這個ViewController類處理兩組不同的任務,所以也許我應該把它們分成兩個不同的視圖控制器。 – mahboudz

+0

您可以創建兩個委託對象並將其分配給不同的滾動視圖。拆分控制器本身可能是一個壞主意,因爲很難在相同視圖上協調兩個控制器。您可能想要創建一個不同的類來處理scollviews,然後使其成爲view controller的屬性,以便控制器可以輕鬆訪問它們。 – TechZen

+0

我會補充說,如果scrollview的功能是「愚蠢的」,即它是獨立於任何特定數據的滾動視圖的內部功能,那麼您可以將功能放在scrollview子類中,不要讓其他任何對象擔心它。 – TechZen

2

你只需要指針什麼被傳遞到方法

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{ 
    if(scrollView == self.firstScrollView){ 
      // do something 
    } 
    else if(scrollView == self.secondScrollView){ 
      // do something else 
    } 
} 

這是假設你scrollviews都在類的屬性進行比較。我很確定這裏的指針比較沒問題。如果它給你的麻煩使用類似

if(scrollView.tag == self.firstScrollView.tag) 

當你創建它們

相關問題