這個問題的答案可能就在我的鼻子下面,但我沒有看到它。也許這裏有人可以幫忙。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的文件保留每個委託集。我也可以分裂我的班級。有另一種方法嗎?
是的,這確實工作,您需要爲它們分配一個標籤。我想,我認爲不經常發生的事情是能夠將每個scrollView的委託放在它自己的文件中,即使這兩個文件都是同一類的一部分。 這個ViewController類處理兩組不同的任務,所以也許我應該把它們分成兩個不同的視圖控制器。 – mahboudz
您可以創建兩個委託對象並將其分配給不同的滾動視圖。拆分控制器本身可能是一個壞主意,因爲很難在相同視圖上協調兩個控制器。您可能想要創建一個不同的類來處理scollviews,然後使其成爲view controller的屬性,以便控制器可以輕鬆訪問它們。 – TechZen
我會補充說,如果scrollview的功能是「愚蠢的」,即它是獨立於任何特定數據的滾動視圖的內部功能,那麼您可以將功能放在scrollview子類中,不要讓其他任何對象擔心它。 – TechZen