【问题标题】:Need clarification regarding MVC design pattern需要澄清关于 MVC 设计模式
【发布时间】:2015-12-10 09:24:55
【问题描述】:

我有一个可重用的 UIView,它有自己的 .xib 文件。此 UIView 将作为子视图添加到不同的 UIViewControllers。在 MVC 设计模式中,我的可重用 UIView 应该只包含用户界面的代码(UILabels、UIButons 等)。我感到困惑的是设置 UILabels 和 UIButtons。包含我的 UIView 的 ViewController 是否负责设置我的 UIView 的 UIButton 单击事件以及我的 UILabel 显示的内容?我现在遇到的问题是我有多个 UIViewControllers 重用相同的 UIView,但它们都实现了设置我的 UIView 的相同代码。这最终导致我的 UIViewControllers 中有很多重复的代码。如果我将设置代码移动到我的 UIView 以减少重复代码,这不违反 MVC 设计模式吗?有没有办法创建一个只负责设置我的 UIView 的“控制器”,这样我就可以在我的 UIViewControllers 中重用我的 UIView 和控制器?

【问题讨论】:

  • 这个问题与 Swift 无关...

标签: ios design-patterns uiview uiviewcontroller


【解决方案1】:

假设通过设置您的意思是指示 UIView 如何根据某个对象绘制自身,这正是 drawRect 方法的用途。 UIView 还提供了一个 initWithFrame 方法,如果需要,您甚至可以创建自己的初始化程序。另一种选择是在您的 UIView 子类中创建一个函数,该函数将获取您正在显示的任何信息并设置您想要的视图方式。比如:setupCustomViewWithMyObject(object)。

所有这一切都说明您的设置代码应该在您的 UIView 子类中,并且您没有违反任何内容。

【讨论】:

  • 通过设置,我还指添加按钮操作(让我的按钮在我的导航控制器上按下一个新屏幕)。我考虑了一下,我认为最好的方法是让一个子 UIViewController 将我的可重用 UIView 添加到它,然后将该子 UIViewController 作为子视图添加到我的父 UIViewController。这样,我可以添加尽可能多的子 UIViewControllers,而无需重复代码。我的想法对吗?
  • 我也会将 IBActions 保留在 UIView 子类中......在我看来,考虑它的方式是 customView:UIView 类已经是 xib 的控制器。然后你应该实现一个委托模式来改变动作的目标(即每次不同的控制器)。换句话说,xib 就是视图!
  • 是的,我的 IBActions 在我的 UIView 子类中。我同意使用委托模式将按钮操作委托给我的 UIViewController。但是,如果我有 2 个非常相似的 UIViewControllers(它们共享完全相同的 UIView 子类并具有确切的按钮操作),将实现 delagate 方法的 UIViewController 设置为另一个 UIViewController 的子级以避免重复代码不是更好吗? ?
  • 但是您仍然需要编写两次启动幻像视图控制器的代码!
猜你喜欢
  • 2011-05-07
  • 2023-01-04
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多