【问题标题】:Will handling UIButton touch event inside a UITableViewCell subclass violate MVC?在 UITableViewCell 子类中处理 UIButton 触摸事件会违反 MVC 吗?
【发布时间】:2015-08-25 15:07:55
【问题描述】:

有一个UITableViewCell 子类,里面有一个UIButton。按下按钮时应进行网络调用。

问题是我应该在控制器中设置动作,还是可以在UITableViewCell 子类中设置动作?第二个选项会违反 MVC 模式吗?

【问题讨论】:

    标签: ios objective-c uitableview model-view-controller uibutton


    【解决方案1】:

    第二个选项肯定会违反 MVC 模式。 ViewController 就像模型、视图之间的粘合剂一样工作,并包含所有业务逻辑。 ViewController 应该会收到操作,然后调用您的 api 并将格式化的数据放入您的视图中。

    通常在我的项目中,我总是尝试将网络代码移动到单独的一组类中,这些类可以处理从 API 获取数据、从 JSON/XML 转换为模型对象并格式化它们(字符串日期对象到 NSDate 对象等)。然后我可以在我的 ViewController 中调用简单的查找方法并填充视图/表格视图单元格。

    另一方面,

    如果你有时间,你可以看看越来越流行的 MVVM。 有一些链接(从令人敬畏的 sprynthesis 开始):

    1. www.sprynthesis.com
    2. objc.io
    3. cocoasamurai
    4. raywenderlich

    还有一些示例应用:

    1. C-41
    2. vinylogue
    3. GroceryList

    由于与 MVVM 的比较,这有助于我更深入地了解 MVC。

    不要害怕使用 ReactiveCocoa,没有它你总是可以采用 MVVM,但值得一看。 (它的学习曲线非常陡峭,我仍然觉得自己像个白痴)

    还有一篇关于 iOS 实现的设计模式的精彩文章:

    raywenderlich design patterns

    【讨论】:

      【解决方案2】:

      好吧,您可以将动作从子类委托给控制器,这样它将在控制器中处理,清晰且不违反 MVC。

      【讨论】:

        【解决方案3】:

        我不建议在 UITableViewCell 中设置操作。如果您需要等待答案并且电池需要回收,您会怎么做?我将在控制器中设置动作。这个控制器应该调用另一个负责执行网络调用的类。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-12-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多