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

时间:2013-11-26 22:53:29

标签: ios uiview uiviewcontroller uistoryboard

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

情景1:

模型类 - >视图控制器(IBOutlets) - >故事板场景中的UIViews

  • ViewController(VC)从Model

  • 中获取必要的数据
  • VC中的IBOutlets用于设置故事板中各种UIViews中的文本和图像

情景2:

模型类 - >查看控制器 - >故事板中的UIViews(IBOutlets)

  • VC从模型中获取数据

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

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

我发现当每个视图中有许多UIViews和UILabel以及UIImageView时,场景2更易于管理。另一种方法可以在单个View Controller中导致大量IBOutlet。

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

1 个答案:

答案 0 :(得分:1)

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

两种情况之间的区别主要在于它们使用封装:第一种情况封装在View + View Controller的级别上,让控制器可以自由访问逻辑上应该只是视图一部分的内容,而第二种情况正确限制IBOutlets对视图类的访问,强制视图控制器通过您在视图中公开的方法与它们进行交互。

因此,第一种情况会在视图与其控制器之间产生紧密耦合,而第二种情况会显着减少这种耦合。

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