如何在UIViewController中添加自定义子视图的多个实例

时间:2013-01-30 15:41:46

标签: ios objective-c uiviewcontroller

通常,当我正在创建我的应用程序时,我处于这种情况:我有一个UINavigationController,处理视图堆栈,一些UIViewControllers,控制它们各自的视图......

但是当我想在mainView中添加几个自定义UIViews时,我不知道如何管理我的代码。

每个UIViewController需要处理一个且只有一个视图(通常占用所有屏幕大小),并且视图不应控制其内容(将其更新为extrême限制)。 你不能这样做:

[myViewController1.view addSubview:childViewController.view];

所以,如果我想实现这样的目标,我该怎么办? My Mockup

橙色部分必须是同一个UIView(Controller?)的3个实例,但内容取决于NSObject(显然是用户)。

我认为分割你的内容非常重要,这应该是一个简单的问题,但我发现了许多相互矛盾的答案,那么处理这个常见问题的最佳做法是什么? 这些橙色视图应该是UIViewControllers的实例,以便它处理它们的UITableViewDatasource? addChildViewController在这种情况下是否相关?

我已经找到了很多有用的东西,但我不知道该怎么办...... 另外,我正在使用xibs。

如果你能帮助我(以及我认为的其他人),请提前致谢。

4 个答案:

答案 0 :(得分:1)

您可以采用任何一种方式(查看或查看控制器),具体取决于您想要处理的方式。当然,您可以将一个对象作为多个表的数据源,因此在这种情况下,您只需添加多个视图。但是,如果您希望保持代码更加分区,则添加视图控制器,并让每个控件都有自己的视图 - 为此,您需要使用addChildViewController,并使用Apple描述的方法来创建自定义容器控制器。或者,您可以在故事板中使用容器视图,这使得创建自定义容器控制器的过程更加简单。

答案 1 :(得分:0)

您走在正确的道路上......创建子视图的单独实例,并将它们添加到您的视图中。如果你有超过3个(例如,想象你的音乐的coverview,你可以无限地向左和向右滚动),我会看看UICollectionViewController ......这将有助于管理单元重用。

但是,如果它只是3,只需创建三个具有不同帧的实例并将它们添加到您的视图中。

答案 2 :(得分:0)

我是这样做的:

每个橙色框都是自定义视图(继承自UIView)

视图将包含标签,图像和tableview。

因为您不确定要使用的这些视图的实例数,所以最好使用某种标记,以便您可以为数据源设置一个位置并委托这些橙色表中的方法视图。

在数据源和委托方法中,您可以使用tableView.tag(与orangeView.tag属性相同)。

我个人不喜欢在视图中有多个viewController(splitVC除外),可能是因为我没有这样的要求。

在uiview上,我看不到橙色盒子的uiviewcontroller如何提供帮助。

正如@James Boutcher在回答中提到的,UICollectionViews将进一步简化这个问题。

答案 3 :(得分:0)

为什么不创建一个UIView类并重写drawRect方法,然后在myViewController1.view中为这个类添加subView