ios - 使用 MVC 设计模式在 Storyboard 中正确使用 IBOutlets

标签 ios uiview uiviewcontroller uistoryboard

遵循在 Xcode 中使用 Storyboard的 iOS 应用程序的 MVC 设计模式,我注意到我可以将 UILabel、UIImageView 等的 IBOutlet 放入 ViewController 或 UIView 本身。

场景 1:

模型类 -> View Controller (IBOutlets) -> Storyboard场景中的 UIViews

  • ViewController (VC) 从模型中获取必要的数据

  • VC中的IBOutlets用于设置Storyboard中各个UIView中的文字和图片

场景 2:

模型类 -> View Controller -> Storyboard 中的 UIViews (IBOutlets)

  • VC 从模型中抓取数据

  • VC调用每个UIView子类中的方法

  • 每个 UIView 子类中的那些方法通过 UIView 中的 IBOutlets 设置关联 UIView 中的文本和图像

我发现当每个 View 中有许多 UIView、UILabel 和 UIImageView 时,方案 2 更易于管理。另一种方法可能导致在单个 View Controller 中有很多 IBOutlet。

使用 Storyboard时最好遵循哪种方法?

最佳答案

您的观察是正确的,第二种情况导致更易于管理的设计。

两种场景的区别主要在于封装的使用:第一种场景封装在 View+View Controller 层面,让 Controller 自由访问逻辑上应该属于 View 的东西,而第二种场景适本地限制 IBOutlets 对 View 类的访问,强制 View Controller 通过您在 View 中公开的方法与它们交互。

因此,第一种情况在 View 与其 Controller 之间创建了紧密耦合,而第二种情况显着降低了这种耦合。

当然有一个权衡:你付出了减少与更多代码的耦合。在某种程度上,这无关紧要:当您的 View 及其 Controller 相对较小时,很容易将 View 及其关联的 View Controller 的组合作为一个整体对象进行管理。随着 View 的复杂性增加,使用第二种情况的好处变得更加明显。这适用于封装的所有用途,不仅适用于 iOS 场景中的 MVS:您的项目越大 - 使用适当封装获得的返回越多。

关于ios - 使用 MVC 设计模式在 Storyboard 中正确使用 IBOutlets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20229710/

相关文章:

ios - 如何像这样在 iOS7+ 中将自定义 UIView 添加到导航栏

objective-c - 代码中创建的 UIView 只在纵向模式下绘制

ios - 带有 UITabbar 的 UINavigationController 中的方向锁定

ios - 如何在加载的早期阶段在 iOS 中使用 Storyboard实例化特定的 View Controller ?

ios - UIPageViewController 定义与以前的值冲突

ios - 检测更改文本的键盘组合

ios - 如何使用 Fabric SDK 在 Swift iOS 应用程序中强制崩溃?

ios - 使用 Cocoa Touch 从服务器上传和下载数据?

javascript - 实现显示更多 - 在页面上显示更少的文本

ios - 快速按下按钮时在下一个 View 中显示不同的图像?