iPhone:如何判断哪个Scrollview调用代理方法?

时间:2010-03-03 11:59:04

标签: iphone iphone-sdk-3.0 uiscrollviewdelegate

答案可能就在我的鼻子底下,但我没有看到它。也许这里有人可以提供帮助。

我有一个允许垂直滚动的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

响应不同的事件,会调用另外两个方法。鉴于有两种协议方法被调用,我认为我已经正确地将委托设置为我自己。那么,问题是什么?

谢谢!

更新:我发现了问题,虽然还没有弄清楚如何解决它。我的班级跨越了两个档案。在第二个文件中,正在实现不同的scrollView         -scrollViewDidEndDecelerating         -scrollViewDidScroll

问题是,如何在同一个类中为两个不同的UIScrollView定义两组不同的方法?

我可以尝试使用相同的委托方法处理两个scrollView,但这很难看,因为我无法使用scrollView的文件保留每组委托。我也可以分开我的班级。还有另一种方式吗?

2 个答案:

答案 0 :(得分:2)

您只需要将指针与传递给方法的内容进行比较

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

这假设您的滚动视图是该类的属性。我很确定指针比较在这里很好。如果它给你带来麻烦,可以使用像

这样的东西
if(scrollView.tag == self.firstScrollView.tag)

创建标签时需要为它们分配标签

答案 1 :(得分:1)

  

问题是,我该如何定义两个   两套不同的方法   不同的UIScrollViews,在同一个   类?

委托方法接受scrollview对象作为其参数。您需要检查传递的滚动视图并做出相应的响应。您可以设置每个scrollview的标记属性以识别它们。