在 UITableViewCell 子类中处理 UIButton 触摸事件会违反 MVC 吗?

Will handling UIButton touch event inside a UITableViewCell subclass violate MVC?

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

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

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

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

另一方面,

如果你有时间可以看看现在越来越流行的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

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

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