【问题标题】:MVC: Where do I place custom UICollectionCellMVC:我在哪里放置自定义 UICollectionCell
【发布时间】:2015-07-25 19:14:38
【问题描述】:

我是移动世界开发的新手,我的项目有一个架构问题:

自定义 UICollectionViewCell 的正确位置在哪里?
本能地我会把它放在 (V)iew 下。

编辑

我会这样使用它:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
  var customCell: CustomCell = collectionView.dequeueReusableCellWithReuseIdentifier(CustomCell.identifier, forIndexPath: indexPath) as! CustomCell
  customCell.setupWithSomeOtherObject(..)
  return customCell;            
}

【问题讨论】:

  • 它实际上取决于...如果单元不直接对 model 层执行任何操作,并且它由 controller中的另一个类填充> 层只显示值,然后它在 view 层上。如果您的单元直接连接到 model 层并直接对其进行更改,那么它更有可能在 controller 层上 - 但基本上 ...ViewCell 应该清楚仅在 view 层上。
  • @holex,真的。另一个问题是,直接在单元格中进行 model 更改是否真的正确..
  • @flashadvanced,这不是一个好的做法,因为如果 model 层被更新(出于任何原因),view 层不应该受到影响全部。如果你是一个项目的唯一工作人员,你可以相对快速地重新安排它,但是当你在一个团队中工作时,你的工作是管理 view 层,而你的队友的工作是模型层;在对不应直接连接的任何层进行简单更新后,您不想获得额外的工作(而您不想给任何人提供额外的工作)。那是经验和拙见。 :)

标签: ios objective-c swift model-view-controller


【解决方案1】:

MVC 是一个可以回答您的问题的大结构。不过我会试试的;

假设您要制作一个基本的照片库。

您的对象需要一个 (M) 模型,假设它是 Photo 模型,它的名称为 createdDate 等等。这个模型只是为你的应用保留一些信息。

你需要一个 (V) 视图来向用户展示一些视觉上的东西。像 ImageView 来显示你的图像,像 UICollectionView 所以 UICollectionView 是一个视图。而且 UICollectionViewCell 是 UICollectionView 内部的一个视图。您也可以向您的单元格添加另一个视图。

您需要一个 (C) 控制器来管理和控制此视图和模型。例如,您在 Photo 对象中保留图像的文件路径,现在您想在 UICollectionView 内部的 UICollectionViewCell 中显示它。

所以你的答案 UICollectionViewCell 必须在你的视图中。 在 MVC 中,所有控件都必须在 Controller 中,避免在视图中执行您的操作。您应该通过 UICollectionView

将 delegate 授予 controller

【讨论】:

    【解决方案2】:

    要直接回答您的问题,UICollectionViewCell 应该出现在 View 中。

    如果您是移动开发新手,我强烈建议您了解什么是 MVVM 模型以及如何将其应用于 iOS。 MVC 的主要问题是最终一切都在 ViewController 子类中结束。 MVVM 在测试你的代码时也有好处(是的,你最终也需要这个)。当然 MVVM 不是圣杯,但你绝对可以给它一个机会。

    不错的文章开头是: MVVM

    【讨论】:

    • 感谢您提到 MVVM,我已经看到了,我认为很多人会朝这个方向发展!
    • @SirDeveloper,我个人不推荐 MVVM,长期维护起来相对困难得多,而且对资源非常敏感;在 iOS 上,这不是一个明智的选择。
    【解决方案3】:

    放置自定义UICollectionViewCell 的正确位置是您的视图组,因为单元格是 视图,它是UIView 的子类,所以是的,这是放置它的正确位置。

    【讨论】:

    • 继承的实际事实并没有真正明确定义,但它与 model 层的连接就像 view 层没有直接与 model 的连接总是通过 controller 层的项目发生。如果存在这样的连接,那么该单元主要位于 controller 层(我们可以讨论它是好还是坏架构),但从逻辑上讲,这将是它在这种 3 向“关系”中的位置.
    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    相关资源
    最近更新 更多