【发布时间】:2014-10-16 11:45:09
【问题描述】:
我注意到在使用 UITableView、UICollectionView、UIPickerView、UIScrollView、...以及许多其他 UIKit 类时,包含对象实例的 UIViewController 通常承担着 DataSource 和 Delegate 的角色。
我从 Apple 的文档中了解到这些数据源和委托方法被称为什么,以及如何实现它们……对于每个类的单个实例。
我的问题是,你如何处理同一个 UIViewController 中的不同实例?例如,如果我有两个 UICollectionViews,或者三个 UIPickerViews,......,还是五十个 UIScrollViews?每个 UIViewController 只能实现一次数据源方法,但我必须以某种方式告诉程序不同的指令?
我唯一能想到的是一个巨大的 switch 语句或一堆级联 if-else if-else 将委托或数据源方法的输入与 UIViewController 中的每个对象实例进行比较,如果有很多。
【问题讨论】:
-
@Christian:题外话。是的,正如我在原帖中提到的,我知道第一个参数是调用者,但这会导致长级联 if 比较或 switch 语句,通常不是解决编程问题的好方法。有没有更聪明的方法?
-
@Kampai:并非不可能。显然,不同的 UICollections 显示不同的集合。例如,两个用户的照片集。如果每个人都只需要一个 UICollectionView,你认为 Apple 为什么将它与 UICollectionViewController 分开?别再这么自以为是了,继续关注主题。
-
@Simon McLoughlin:我不需要两个 VC 课程。我有一个 VC,只是同一个类的多个项目调用同一个委托方法。
-
@Cindeselia 抱歉,我误解了您的问题。正如其他人所提到的,每个委托都会触发对创建它的元素的引用。你可以用它来比较
-
@Cindeselia 我不明白,为什么我的评论跑题了。不过,您可以将委托代码提取到外部类,并为每个 UIView 分配另一个委托。这样您就可以保持 VC 的代码干净。
标签: ios objective-c iphone uiviewcontroller uikit