1

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

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

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

我可以尝试使用相同的委托方法处理两个滚动视图,但这很难看,因为我无法将每组委托与滚动视图的文件一起保存。我也可以分班。还有其他方法吗?

4

2 回答 2

3

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

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

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

于 2010-03-03T12:57:20.233 回答
1

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

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

于 2010-03-03T12:38:09.860 回答