0

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

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

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

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

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

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

4

1 回答 1

0

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

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

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

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

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

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

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

于 2012-05-28T22:26:34.567 回答