iPhone:如何判断哪个Scrollview调用委托方法?

iPhone:如何判断哪个Scrollview调用委托方法?,iphone,iphone-sdk-3.0,uiscrollviewdelegate,Iphone,Iphone Sdk 3.0,Uiscrollviewdelegate,这个问题的答案可能就在我眼皮底下,但我没有看到。也许这里有人可以帮忙 我有一个允许垂直滚动的滚动视图。我设置它: [clefScrollView addSubview:clefView]; [clefScrollView setContentSize:CGSizeMake(clefView.frame.size.width, clefView.frame.size.height)]; clefScrollView.showsVerticalScrollIndicator = YES; clefS

这个问题的答案可能就在我眼皮底下,但我没有看到。也许这里有人可以帮忙

我有一个允许垂直滚动的滚动视图。我设置它:

[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");
}
@interface ClefNotesViewController : UIViewController <UIActionSheetDelegate,UIScrollViewDelegate,DoneWithVCDelegate> {
此外,我的类的.h文件包括以下协议:

- (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");
}
@interface ClefNotesViewController : UIViewController <UIActionSheetDelegate,UIScrollViewDelegate,DoneWithVCDelegate> {
另外两个方法确实会被调用以响应不同的事件。鉴于调用了两个协议方法,我假设已正确地将委托设置为我自己。那么,问题是什么

谢谢

更新:我发现了问题,尽管还没有找到解决方法。我的类跨越两个文件。在第二个文件中,实现了一个不同的scrollView -滚动视图减速 -scrollViewDidScroll

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

我可以尝试用相同的委托方法处理两个scrollView,但这很难看,因为我无法用scrollView的文件保存每组委托。我也可以分班上课。还有别的办法吗

问题是,我如何定义两个 两种方法的不同集合 不同的UIScrollView,在同一个 上课

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

问题是,我如何定义两个 两种方法的不同集合 不同的UIScrollView,在同一个 上课


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

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

- (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)

当您创建它们时,您需要为它们分配一个标记

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

- (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)

在创建它们时,您需要为它们分配一个标记

是的,确实有效。我希望能够将每个scrollView的委托保存在自己的文件中,即使这两个文件都属于同一个类,但我想这不会经常发生。这个ViewController类处理两组不同的任务,所以也许我应该将它们拆分为两个不同的视图控制器。您可以创建两个委托对象,并将每个委托对象分配给不同的滚动视图。拆分控制器本身可能是个坏主意,因为很难为同一视图协调两个控制器。您可能希望创建一个不同的类来处理scollviews,然后将其设置为视图控制器的属性,以便控制器可以轻松访问它们。我要补充的是,如果scrollview的功能是“哑”的,即它仅与scrollview的内部功能相关,与任何特定数据无关,您可以将该功能放在scrollview子类中,而不让任何其他对象担心它。现在,我从未创建过独立委托。在不声明新类的情况下,如何做到这一点。您确实创建了一个新类。创建一个NSObject子类,该子类实现scrollview委托协议。通常的做法是使这些代理成为视图控制器的属性。当控制器加载视图时,它将为每个滚动视图分配适当的代理。是的,这确实有效。我希望能够将每个scrollView的委托保存在自己的文件中,即使这两个文件都属于同一个类,但我想这不会经常发生。这个ViewController类处理两组不同的任务,所以也许我应该将它们拆分为两个不同的视图控制器。您可以创建两个委托对象,并将每个委托对象分配给不同的滚动视图。拆分控制器本身可能是个坏主意,因为很难为同一视图协调两个控制器。您可能希望创建一个不同的类来处理scollviews,然后将其设置为视图控制器的属性,以便控制器可以轻松访问它们。我要补充的是,如果scrollview的功能是“哑”的,即它仅与scrollview的内部功能相关,与任何特定数据无关,您可以将该功能放在scrollview子类中,而不让任何其他对象担心它。现在,我从未创建过独立委托。在不声明新类的情况下,如何做到这一点。您确实创建了一个新类。创建一个NSObject子类,该子类实现scrollview委托协议。通常的做法是使这些代理成为视图控制器的属性。当控制器加载视图时,它将为每个滚动视图分配适当的委托。