ios – 编写UIViews以创建复杂视图的最佳方法?

前端之家收集整理的这篇文章主要介绍了ios – 编写UIViews以创建复杂视图的最佳方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
从网络堆栈过渡到iOS仙境,我发现很难理解如何重新构建我对MVC的想法并在iOS上有效地构建我的UI.

前提:

>在网络堆栈中:

> Controller通常对应一个URL,视图代表页面.
>视图有办法不用CSS Javascript片段重复代码.

>在iOS中:

>一旦进入与UIViewController对应的新屏幕.
>我们有一个UIView组成自己的UIViews
> UIViews与UIViews,UIViewController与UIViews,UIViewController与内联UIViews一起存在
>我们确实将重型或数据逻辑委托给最近的控制器
>感觉大多数在iOS中首先看起来很棒

题:

考虑将视图组合到我的self.view的最佳方法是:

>作为UIView类的视图
>作为UIViewController发生的视图,具有关联的UIView类.
>作为具有内联UIView的UIViewController发生的视图

示例视图层次结构

------------------------------
|             A              |
|                            |
|    --------------------    |
|    |        B         |    |
|    |                  |    |
|    |  --------------  |    |
|    |  |     C      |  |    |
|    |  |            |  |    |
|    |  |            |  |    |
|    |  |            |  |    |
|    |  |            |  |    |
|    |  |            |  |    |
|    |  |            |  |    |
|    |  --------------  |    |
|    |                  |    |
|    --------------------    |
|                            |
------------------------------

[细节具体]我〜不舒服〜经历:

>一个可能[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.
>在所有这些案例共存后,我们必须考虑范围
>我看到C通过长代表链回答了C的问题.

逻辑分散在委托,viewControllers和视图中.

分离问题 – 但如何?

除了可以改善以上经验的“抽象井和关注点分离”这一论点.我相信它的viewController和viewController.view的流失很容易导致广泛的耦合.

这很快变得令人困惑,感觉就像意大利面条,尽管付出了努力但很难控制.

那说,

>解决上述陷阱的最佳做法是什么?
>绝对不应该做什么?
>当代理人有效地说你可以更好地处理这个问题时,我们如何避免长代表链?

解决方法

也许,你正在处理的是MVC – 大规模视图控制器的困境.这是一个有趣的读物,Marcus谈到通过将代码放在它所属的地方,网络层,持久层或表示层(理想情况下是viewcontroller)来有效地管理代码.

http://www.cimgf.com/2015/09/21/massive-view-controllers/

除了委托模式,我们还有基于块/闭包的方法,可能有助于清理代码.

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html

一般来说,Robert C. Martin的清洁代码方法在这里可能会有所帮助.通过称为VIPER架构的方式实现它的方法.这是一个关于它的教程.

https://www.objc.io/issues/13-architecture/viper/

目标C,作为一种语言包含委托模式,并且将其用于大多数人的关注是一种标准做法.

欢迎来到iOS平台.

猜你在找的iOS相关文章