【问题标题】:Pagination engine architecture - iOS分页引擎架构 - iOS
【发布时间】:2026-01-23 12:50:01
【问题描述】:

创建分页引擎架构的最佳方法是什么?

在我之前的实现中,我会

- UIViewController
   - property UITableView
   - with two sections in tableView. One for normal display and other 
   - for PaginationCell 
   - and rest of the business logic how to enable and hide indicator View

我们认为每个功能的重复代码过多,因此决定删除重复代码。

我们在UIViewController 上写了一个类别来处理数据分页。现在我们使用scrollViewDidScroll 处理类别内的所有计算,并使用objc_setAssociatedObject 添加指示符页脚视图。

我认为Associated objects 应该被视为一种不得已而为之的方法,而不是寻找问题的解决方案(实际上,类别本身不应该在一开始就位于工具链的顶端)。

所以我的问题是 - 这个新设计是解决这个问题的最佳方案吗?或者您会推荐一些更好的方法吗?

【问题讨论】:

    标签: ios uiscrollview pagination categories uivewcontroller


    【解决方案1】:

    我不知道您不想要的重复代码到底是什么,但我根本不认为使用类别是解决此问题的好方法。

    我可以建议的是拥有一个具有职责分离的良好架构。这将引导您找到解决方案。

    如果可以帮助您阅读我的文章Anatomy of a TableView(Controller) ArchitectureInteraction Objects 上的具体文章。 您可以将交互对象想象为包含单元所需所有信息的框,例如:

    • 我应该显示什么?
    • 我应该使用哪种电池?
    • 如果使用选择此单元格(目标、选择器、..),我必须做什么? 等

    一般来说,按照所描述的方法,您在大多数情况下都不会感到卡在前面。

    ;)

    对于分页,我会创建一个依赖于表视图控制器的管理器。这个想法是:

    1. 用户tableView上做了一些事情;
    2. tableView 的委托(通过交互对象、委托或块)将事件传达给 视图控制器
    3. 视图控制器,向分页管理器询问新参数;
    4. 视图控制器将新参数传递给tableView的数据源并重新加载它;

    【讨论】:

    • 谢谢@Matteo 这真的很有意义。我同意你的看法:)