【问题标题】:How should one cope with multiple delegates in a paged UIScrollView应该如何处理分页 UIScrollView 中的多个委托
【发布时间】:2016-09-02 12:05:36
【问题描述】:

我有一个 UIScrollView,包含 3 个页面。

前两个是UITableView,第三个是UICollectionView

所以在一个 View Controller 中,我必须为所有的 View Controller 编写委托方法。

我google了一下,找到了这样的解决方案(尚未测试),

将每个页面放在一个单独的 UIViewController 中,实现 对应的委托方法,并使用UIViewController.view 构建滚动视图的属性

UIViewController.view 方法对我来说似乎是错误的,这是正常的做法吗?

【问题讨论】:

  • 为每个 tableview 和 collectionview 设置 outlets 并在代表中检查它。我的意思是 if(tableview == yourtableview) 在数据源或委托中。
  • @sohanvanani 我正在尝试将委托方法放在不同的文件和不同的视图控制器中
  • 好的,我想这很容易看到我编辑的评论
  • @sohanvanani 谢谢..但我不太明白...我有表格视图和 uicollectionview
  • 查看tableview,您可以根据调用的tableview数据源返回单元格,您可以在cellforrowatindexpath中检查。

标签: ios objective-c uitableview uiscrollview


【解决方案1】:

您为什么要尝试在一个视图控制器中处理所有委托调用,您不能为每个视图控制器创建单独的视图控制器吗?如果你现在不分离,那么以后管理代码对你来说会更加困难。

【讨论】:

    【解决方案2】:

    绝对使用控制器组合是解决大规模视图控制器问题的标准且受人尊敬的解决方案。例如,检查 the StackViewController project 的展示,它巧妙地使用该概念在 UIStackView 中创建表单:

    组合优于继承是面向对象编程的基本原则。

    这一原则一直用于 iOS 视图层次结构,其中更复杂的视图由更简单的视图组成(例如 UIButton 如何包含渲染其内容的 UILabel 和 UIImageView)。然而,在 iOS 5 中引入视图控制器包含之前,没有“官方”的方式来组合视图控制器。在 iOS 5 之前可以模仿这样的行为,但要处理父视图控制器和子视图控制器之间的事件传播和子视图控制器之间的转换很难正确处理,这些都是视图控制器包含 API 解决的问题。

    与您可以通过组合多个 UIStackView 实例来创建复杂布局的方式相同,您可以使用视图控制器包含 API 组合多个 StackViewController 实例来创建视图控制器的层次结构,其中每个内容视图都由相应的视图支持控制器清晰地分离了职责,而不是在视图级别处理所有这些(反模式,如前所述)。

    还请查看8 Patterns to Help You Destroy Massive View Controller,特别是

    标准作文

    可以使用 iOS 5 中引入的 View Controller Containment API 组合视图控制器。如果您的视图控制器由多个逻辑单元组成,每个逻辑单元都可以是它们自己的视图控制器,请考虑使用组合将它们分开。此试金石的实际应用是具有多个表视图或集合视图的屏幕。

    事实上,你必须将它实际应用到的确切情况!

    【讨论】:

      猜你喜欢
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多