【发布时间】:2017-03-18 22:05:22
【问题描述】:
从 web-stack 过渡到 iOS 仙境,我发现很难理解如何重新构建我对 MVC 的想法并在 iOS 上有效地构建我的 UI .
前提:
- 在网络堆栈中:
- Controller一般对应一个URL,view代表页面。
- 视图可以通过 CSS +Javascript + 片段实现不重复代码。
- 在 iOS 中:
- 在对应于 UIViewController 的新屏幕上。
- 我们有一个 UIView 组成自己的 UIViews
- UIViews 与 UIViews 一起存在,UIViewController 与 UIViews 存在,UIViewController 与内联 UIViews 存在
- 我们绝对将繁重的或数据逻辑委托给最近的控制器
- 在 iOS 中感觉主要是 先查看,这很棒
问题:
将视图组合到我的self.view 的最佳方式是:
-
UIView类的视图 - 以
UIViewController出现的视图具有关联的UIView类。 - 以
UIViewController出现的视图,内联UIView
示例视图层次结构:
------------------------------
| A |
| |
| -------------------- |
| | B | |
| | | |
| | -------------- | |
| | | C | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | -------------- | |
| | | |
| -------------------- |
| |
------------------------------
[具体细节]我的~不舒服~经历:
-
A可能[self addView:B_view](如果 B 只是 UIView) -
A也可能是[self addView:B_viewController.view](如果 B 有视图控制器) -
A也可能是[B setChildView:C_view] - 我们可以有
B_viewController.delegate = A&C_viewController.delegate = A - 我们可以有
B_viewController.delegate = A&C_view.delegate = B - 在所有这些情况并存之后,我们必须考虑界限
- 我看到 A 通过长委托链回答了 C 的问题。
逻辑分散在委托、视图控制器和视图中。
分离关注点 - 但如何?
除了可以改善上述体验的论点“抽象好和关注点分离”。我认为 viewController 和 viewController.view 的出血很容易导致广泛的耦合。
这很快变得令人困惑,感觉就像意大利面,尽管努力也难以控制。
也就是说,
- 解决上述缺陷的最佳做法是什么?
- 什么是绝对不能做的?
- 当很难提出好的论据时,我们如何避免长的委托链,因为当委托有效地表示您可以更好地处理这个问题时?
【问题讨论】:
-
问题来自实践经验,我相信不只是我,应该作为一个很好的资源。
-
很好的问题,不明白反对意见。虽然不确定我能回答,但我经常问自己同样的问题。
-
好问题。 OP已经完成了他的作业并很好地组织了这个问题。请添加拒绝投票的理由。
-
如果这被标记为“太宽泛”,在 Stack 网站的什么地方可以问这样的问题?
-
既然你问的是应用架构相关的问题,我建议你阅读以下关于iOS应用架构的文章medium.com/ios-os-x-development/…
标签: ios cocoa-touch uiview uiviewcontroller