【问题标题】:Connecting a UIView to a UIViewController将 UIView 连接到 UIViewController
【发布时间】:2012-06-03 02:52:04
【问题描述】:

我有一个 UIView 子类,其中包含一些标签、一个 tableview 和一些其他部分。它目前是 tableview 的委托和数据源,还管理许多 UI 操作,这些操作都不依赖于数据。例如,当按下“编辑”按钮时,它知道如何更新其控件,但是当按下“保存”时,除了将控件切换回之前的状态之外,它不会做任何事情。所有这些都是在代码中完成的,我在这个应用程序中根本没有使用 IB。

我现在想深入了解它可能引发的所有数据模型更改。但我想把这些放在一个新的控制器类中,我想这是符合 MVC 的做事方式。我不知道怎么去那里。

首先,我需要创建一个自定义控制器类。我是否应该从 UIView 子类中公开一些控件,以便视图控制器可以访问它们?例如,我需要在视图中读取和写入文本字段,那么我应该为此提供一个 getter/setter 吗?

其次,tableview - 而不是 UIView 作为委托,我是否也应该公开它,并使视图控制器成为委托? IE。来自 UIViewController 的 view.tableView.delegate = self?

最后,我如何从另一个视图启动视图?具体来说,这是一个类似于天气应用程序的分页滚动视图应用程序,因此我有一个 mainView UIView,它指定单个分页滚动视图,然后添加多个自定义 UIView,每个页面一个。如何替换 [scrollView addSubview:myCustomView] 而添加 viewController?以及如何将视图连接到它的控制器,反之亦然?

我之前没有在没有 IB 的情况下尝试过所有这些,所以感谢您的帮助。

【问题讨论】:

    标签: ios cocoa-touch model-view-controller uiview uiviewcontroller


    【解决方案1】:

    您的问题非常广泛,部分答案取决于您如何编写解决方案。我会尝试回复一些对我有用的提示

    视图:作为一般经验法则,请记住,视图对象应该是非常通用的,它对自身层次结构之外的其他视图一无所知。因此,视图不应依赖与其他视图的任何特定交互,而应在需要时通过回调、协议、块等与它的委托/所有者/创建者进行通信。

    视图控制器: 任何时候您需要使不同层次结构中的两个视图相互交互,我的建议是您坚持通过视图控制器处理该交互。通过这样做,您可以确保您的视图不会被在不同屏幕中无用的代码污染。

    另外请记住,iOS 的 UIViewController 旨在成为一个用于处理完整可见视图层次结构的类,而不是充当单个视图的控制器。因此,我建议您不要尝试为每个视图设置一个控制器,而是使用一个控制器来处理所有视图。

    发布视图元素: UIView 在其头文件中公开多少取决于您的实现。任何处理视图外观的方法,看起来是通用的和可重用的,并且不需要视图树范围之外的任何东西,肯定是你想要包含在它的实现中并在头文件中发布的东西.

    对于您认为很可能需要外部人员访问的任何财产也是如此。

    建议:只发布真正需要的内容。通常发布新的方法和属性比稍后删除它们更容易。

    【讨论】:

      猜你喜欢
      • 2012-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多