答案可能就在我的鼻子底下,但我没有看到它。也许这里有人可以提供帮助。
我有一个允许垂直滚动的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的文件保留每组委托。我也可以分开我的班级。还有另一种方式吗?
答案 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的标记属性以识别它们。