2011-08-23 32 views
0

我试着阅读关于类似情况的其他问题,但没有运气,所以这里有一个问题。 我有一个嵌套的UIScrollView的设置,虽然滚动都很好,但我似乎没有任何委托事件。嵌套UIScrollViews和获取信息,当滚动发生

外部UIScrollView分页并垂直滚动。里面我有多个水平滚动分页UIScrollViews“行”。现在,我想要的是在垂直滚动发生时强制内滚动器到特定位置。

我让ViewController成为一个委托,并调用scrollViewDidScroll,但它只会在最初设置滚动条时触发,而不会触发设备并滚动网格。

我正在监听内部和外部滚动器,并且他们都忽略了在设备上滚动时触发任何事件。

我对Obj-C和Cocoa开发人员相当陌生,所以我可能会完全错过某些明显的东西,但任何帮助表示赞赏。

回答

2

我创建了一个小测试项目,它似乎一切正常。请确保调用的所有scrollViews的​​(假设控制器本身是委托。除此之外,始终确保scrollViews比他们的帧更大contentSize,如果没有的话scrollDidScroll:不应该开火的。

我的小项目基本上有一个指向外部scrollView和所有内部scrollViews的NSArray,每次外部滚动(只有在scrollViewDidScroll:委托方法中有一个小检查)我简单地递归地将所有内部scrollViews的contentOffset更改为CGPointMake(0.0, 0.0)

这不是最优化的方法,因为实际上只有以前可见的scrollView需要重置(所有其他o无论如何,nes应该已经在这个偏移量)。另外,作为一个附注,根据内部scrollView的数量,这种将它们全部添加到外部scrollView的方法可能会严重损害性能(应用程序需要在内存中包含所有子视图),因此您可能需要考虑重新使用scrollViews (Apple示例项目PhotoScroller在重用UIScrollView中的子视图时有一些巧妙的技巧,它们基本上模仿了UITableView的工作方式)。

如果您有任何其他问题,请让我知道我会发布示例项目。

+0

谢谢,我其实是做错了。我错过了setDelegate部分,现在一切似乎都很好。我结束了使用scrollViewDidEndDecelrating,但点仍然有效。 – margusholland