UIScrollViewDelegate 不触发方法

Posted

技术标签:

【中文标题】UIScrollViewDelegate 不触发方法【英文标题】:UIScrollViewDelegate not firing methods 【发布时间】:2012-06-27 08:21:45 【问题描述】:

我有一个带有 UIScrollView 的视图,带有一些文本(通过 JSON 加载)。我需要检测用户何时到达滚动的末尾(我在这里看到了关于它的其他问题)但问题是,我已经完成了 .h 实现 UIScrollViewDelegate,我有

@property (retain, nonatomic) IBOutlet UIScrollView *scroll;

在我的 .h 文件中,并在 .m 文件中合成它。我的 viewDidLoad 中有这个:

self.scroll=[[UIScrollView alloc]init];
self.scroll.delegate=self;

在 Interface Builder 中建立连接(IBOutlet “滚动”与 UIScrollView 等)。

之后,我通过调用 JSON 来完成 UITextView,并执行与 scrollView 无关的其他事情。然后,我实现了方法 scrollViewDidScroll。但是,它永远不会被调用。滚动效果很好,让我上下查看整个文本。但是,知道为什么不调用协议的方法吗?

谢谢。

【问题讨论】:

【参考方案1】:

您不需要分配和初始化一个新的UIScrollView 实例。当您从 IB 链接它时,它已经完成。这样你就破坏了链接。

顺便说一下,你的scroll属性定义为retain,所以

self.scroll = [[UIScrollView alloc]init];

是内存泄漏。

【讨论】:

好的,我已经注释了分配和初始化滚动的行,并确保在 Interface Builder 中连接了 IBOutlet。而且,没有结果。 那么你怎么不调用方法呢? NSLog?断点? 嗯我刚刚看到这个***.com/questions/3518290/… 也许我必须设置 contentSize?尽管 UIScrollView 工作正常? 您正在实施哪些UISCrollViewDelegate 方法?如果内容不大于滚动视图本身,它们可能根本没有被调用。 只有scrollViewDidScroll。如果用户到达滚动的末尾,我会在那里计算。是的,内容比滚动视图大得多。 Lorem Ipsum 的东西:)。解决方案是,如果要调用该方法,则必须在代码中设置 contentSize。酷苹果乐趣!【参考方案2】:

您的UIViewController是否符合UISrollViewDelegate?协议here。

请记住以下几点:

UIScrollViewDelegate 协议声明的方法允许 采用委托来响应来自 UIScrollView 类的消息 从而响应并在一定程度上影响诸如滚动之类的操作, 滚动内容的缩放、减速和滚动动画。

没有强制的方法,但你需要采用协议才能使用这些方法。

【讨论】:

并非所有方法都是强制性的,据我所知,我不必全部实现。 协议在我的 .h 文件中,如果这就是你的意思:@interface myViewController : UIViewController (从一开始就是这样) 是的,这正是我的意思。然后检查皱眉的评论,这可能是问题所在。 嗯,皱眉?你什么意思? :P 我的英语不是很完美,字典里没有这样的词 :P 我不认为你的意思是皱着眉头呵呵 哦,你的意思是用户皱着眉头嘿嘿抱歉。没看到他的名字。【参考方案3】:

也就是说...如果您希望调用 scrollViewDidScroll 方法,我必须以编程方式设置 contentSize(尽管滚动效果很好)。

太棒了... x(

【讨论】:

好吧,如果scroll.frame.sizescroll.contentSize 相同,那么滚动有什么意义呢? :) 不需要那种cmets。

以上是关于UIScrollViewDelegate 不触发方法的主要内容,如果未能解决你的问题,请参考以下文章

未调用 UIScrollViewDelegate 函数

UIScrollViewDelegate 中的委托方法不响应表格视图滚动事件

如何使用 UIScrollViewDelegate 方法重新实现 UIScrollView 分页

iOS 设计中关于UIScrollViewDelegate的几个代理方法的简单介绍

在 UICollectionView 子类中实现 UIScrollViewDelegate

成为 UITableView 的 UIScrollViewDelegate 代表