如何使用子视图的延迟/动态加载实现自定义 UIView,类似于 UITableView

Posted

技术标签:

【中文标题】如何使用子视图的延迟/动态加载实现自定义 UIView,类似于 UITableView【英文标题】:How to implement custom UIView with lazy/dynamic loading of subviews, similar to UITableView 【发布时间】:2011-12-16 18:39:49 【问题描述】:

所以,我目前有一个 GridView 类,这基本上就是它听起来的样子。它是 UIView 的一个子类,它有一个暂存区域,其中有一堆子视图以类似网格的方式放置。目前我将 GridView 放入笔尖中的 UIScrollView 中。当 GridView 加载时,它必须一次加载所有的子视图,即使是那些不可见的。

例如,如果我有一个 5 列和 500 行的网格,它将一次加载所有 2500 个视图,正如您可以想象的那样,这需要很长时间。我想实现它,以便它只加载可见的视图,并在用户滚动时加载新视图。这类似于 UITableView 加载其单元格的方式。

我认为它会遵循与 UITableView 相同的模式,但我不太确定如何开始。任何人有任何指针/提示?

提前致谢

【问题讨论】:

【参考方案1】:

您知道每个网格单元的大小。我假设您正在实现 UIScrollViewDelegate 方法,因此您可以在滚动时收到一条消息。因此,一旦您收到-(void)scrollViewDidScroll:(UIScrollView *) 消息,计算可见单元格,并加载进入视图的单元格的视图。

更好的是,就像在UITableView 中一样,回收您的单元格视图。当单元格离开视野(顶部或底部)时,将视野外的单元格用于进入视野的新单元格。

查看 UITableView 类的 ivars 和方法,并考虑模仿该行为和实现。

【讨论】:

以上是关于如何使用子视图的延迟/动态加载实现自定义 UIView,类似于 UITableView的主要内容,如果未能解决你的问题,请参考以下文章

在 UIViewController 的主视图中加载自定义 UIView

如何实现在动态布局中添加更多视图在android中实现滚动视图

实现 UITableView (Slave) 的动态高度,它作为子视图添加到另一个具有动态高度的 UITableView (Master) 的自定义单元格中

来自 XIB 的自定义 UIView 加载具有巨大规模的子视图

如何在加载了 nib 文件的 UIView 中调整子视图的大小

当按钮是iOS中自定义单元格的子视图时,如何动态更改按钮文本?