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也就是说...如果您希望调用 scrollViewDidScroll 方法,我必须以编程方式设置 contentSize(尽管滚动效果很好)。
太棒了... x(
【讨论】:
好吧,如果scroll.frame.size
与scroll.contentSize
相同,那么滚动有什么意义呢? :)
不需要那种cmets。以上是关于UIScrollViewDelegate 不触发方法的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollViewDelegate 中的委托方法不响应表格视图滚动事件
如何使用 UIScrollViewDelegate 方法重新实现 UIScrollView 分页
iOS 设计中关于UIScrollViewDelegate的几个代理方法的简单介绍