Ios 同时在屏幕上显示多个UIViewController

Ios 同时在屏幕上显示多个UIViewController,ios,cocoa-touch,uiviewcontroller,Ios,Cocoa Touch,Uiviewcontroller,我在多个地方读到,一次只能有一个UIViewController出现在屏幕上。但我不太明白如何实现我需要的东西 想象一下天气应用程序。有一个带有滚动视图的单一视图控制器,其中添加了多个视图(天气面板)。大概这些都是由主UIViewController添加和管理的,它还负责滚动等 但是想象一下,每个天气面板都是一个汽车视图,每个都有关于特定类型汽车的数据,以及一些编辑这些数据的控件 有一系列的carviewcontroller,每个控制器都有一个Car属性,它们可以操作,这难道没有意义吗?每个Ca

我在多个地方读到,一次只能有一个
UIViewController
出现在屏幕上。但我不太明白如何实现我需要的东西

想象一下天气应用程序。有一个带有滚动视图的单一视图控制器,其中添加了多个视图(天气面板)。大概这些都是由主
UIViewController
添加和管理的,它还负责滚动等

但是想象一下,每个天气面板都是一个
汽车视图
,每个都有关于特定类型汽车的数据,以及一些编辑这些数据的控件

有一系列的
carviewcontroller
,每个控制器都有一个
Car
属性,它们可以操作,这难道没有意义吗?每个
CarViewController
将负责其汽车数据对象、视图,并将它们粘在一起,而主视图控制器只负责将每个
CarViewController.view
添加到其滚动视图中


这对可重用性和封装不是更好吗?更不用说更方便了。

我想这取决于它是否会让你的生活更轻松。我喜欢做的另一种选择是只编写复合
UIView
子类,专门用于显示“概念”模型(如汽车),然后在其上编写类别,以使用特定的模型实现填充视图信息。这样,您可以在更改模型时重新使用视图,但仍然可以避免视图控制器中的某些逻辑混乱。我尝试为一些完全不同的视图保留一个视图控制器,这些视图通过
UISegmentedControl
或其他方式进行切换

编辑:一个
ui视图及其填充类别的示例

@interface CarView : UIView

@property (strong) UILabel *modelLabel;
@property (strong) UILabel *makeLabel;
@property (strong) UILabel *yearLabel;
//etc

@end
然后你有一个特定于模型的类别,虽然视图上的类别实际上更适合控制器层;虽然有点违反MVC,但我认为从责任分配的角度来看,它工作得很好,不会将主视图实现与任何数据实现耦合,并使视图控制器更精简,因此我认为值得权衡

@interface CarView (CarEntityPopulating)

- (void)populateFieldsWithEntity:(NSManagedObject *)entity;

@end

@implementation CarView (CarEntityPopulating)

- (void)populateFieldsWithEntity:(NSManagedObject *)entity
{
    self.modelLabel.text = [entity valueForKey:@"name"];
    self.makeLabel.text = [[entity valueForKey:@"make"] valueForKey:@"name"];
    self.yearLabel.text = [[entity valueForKey:@"year"] stringValue];
    //etc....
}

现在似乎在iOS5中使用容器视图控制器明确支持这一点

目前还没有太多的资源来讨论它,但它是有用的


还提供了一些资源。

您的意思是使用不同的标题吗?您的意思是类似于[carView populateViewInfoWithCar:(Car*)Car]?其中,carView是UIView而不是UIViewController?是的,除非我永远不会使用点语法调用非属性方法;)但是是的。。。我将添加一个我想到的示例。(oops-更正!)如何处理该视图上的多个控件,这些控件应该更新汽车的属性?大量的委托给主ViewController?实际上这是一个非常好的问题。我主要用它来表示数据。对于表单元格,我也经常这样做,所以在这些情况下,我会将其委托回表的委托。或者该单元将有一个按钮;我将委托给表格控制器,或者将一个块传递给单元格-以同样的责任方式进行调整。虽然没有什么可以阻止您在类别中执行操作,并将视图本身设置为目标,但这似乎太过分了,我想在这一点上尝试一种不同的解决方案。@BenPackard听起来像是在管理视图和模型之间的交互,那么哪个更适合视图控制器。如果你在其他问题中发布次要问题,那么对它们进行评估会很有趣。你总是写一些有趣的问题。