【发布时间】:2015-08-25 15:07:55
【问题描述】:
有一个UITableViewCell 子类,里面有一个UIButton。按下按钮时应进行网络调用。
问题是我应该在控制器中设置动作,还是可以在UITableViewCell 子类中设置动作?第二个选项会违反 MVC 模式吗?
【问题讨论】:
标签: ios objective-c uitableview model-view-controller uibutton
有一个UITableViewCell 子类,里面有一个UIButton。按下按钮时应进行网络调用。
问题是我应该在控制器中设置动作,还是可以在UITableViewCell 子类中设置动作?第二个选项会违反 MVC 模式吗?
【问题讨论】:
标签: ios objective-c uitableview model-view-controller uibutton
第二个选项肯定会违反 MVC 模式。 ViewController 就像模型、视图之间的粘合剂一样工作,并包含所有业务逻辑。 ViewController 应该会收到操作,然后调用您的 api 并将格式化的数据放入您的视图中。
通常在我的项目中,我总是尝试将网络代码移动到单独的一组类中,这些类可以处理从 API 获取数据、从 JSON/XML 转换为模型对象并格式化它们(字符串日期对象到 NSDate 对象等)。然后我可以在我的 ViewController 中调用简单的查找方法并填充视图/表格视图单元格。
另一方面,
如果你有时间,你可以看看越来越流行的 MVVM。 有一些链接(从令人敬畏的 sprynthesis 开始):
还有一些示例应用:
由于与 MVVM 的比较,这有助于我更深入地了解 MVC。
不要害怕使用 ReactiveCocoa,没有它你总是可以采用 MVVM,但值得一看。 (它的学习曲线非常陡峭,我仍然觉得自己像个白痴)
还有一篇关于 iOS 实现的设计模式的精彩文章:
【讨论】:
好吧,您可以将动作从子类委托给控制器,这样它将在控制器中处理,清晰且不违反 MVC。
【讨论】:
我不建议在 UITableViewCell 中设置操作。如果您需要等待答案并且电池需要回收,您会怎么做?我将在控制器中设置动作。这个控制器应该调用另一个负责执行网络调用的类。
【讨论】: