Iphone 将带有控制器的视图添加到带有控制器的视图-正确的方式?

Iphone 将带有控制器的视图添加到带有控制器的视图-正确的方式?,iphone,ios,objective-c,model-view-controller,uiviewcontroller,Iphone,Ios,Objective C,Model View Controller,Uiviewcontroller,我必须添加几个视图,每个视图都有自己的控制器到带有控制器的主视图中。我在关注MVC。添加这些子视图的代码应该在视图类还是控制器类中编写?还有,什么是正确的方式 MyViewController1 *myViewController1 = [[MyViewController1 alloc] init]; [myMainViewController.view addSubview:myViewController1.view]; 或者,其他方式 还有另一个选项-容器视图控制器和addChildV

我必须添加几个视图,每个视图都有自己的控制器到带有控制器的主视图中。我在关注MVC。添加这些子视图的代码应该在视图类还是控制器类中编写?还有,什么是正确的方式

MyViewController1 *myViewController1 = [[MyViewController1 alloc] init];
[myMainViewController.view addSubview:myViewController1.view];
或者,其他方式


还有另一个选项-容器视图控制器和addChildViewController方法,但这很难管理,因此我需要一种简单的方法。

如果要将视图控制器添加到另一个视图控制器的视图中,则需要使用容器包含。您可以使用容器视图在IB中实现这一点。这比在代码中创建自定义容器控制器更容易。

绝对最好的方法是根据视图控制器的功能维护它们,例如,一种可能是仪表板视图,另一种可能是设置视图。现在,当从一个视图控制器移动到另一个视图控制器时,需要使用navigationController

我遵循的做法是在应用程序启动时在appDelegate中声明一个navigationController,然后继续重用它。示例-

YourAppDelegate *delegate=(YourAppDelegate *)[[UIApplication sharedApplication] delegate];
MyViewController1 *myVC = [[ FLOHome alloc ]initWithNibName:@"MyViewController1" bundle:[NSBundle mainBundle]];
[delegate.navigationController pushViewController:myVC animated:NO];

这是处理ViewController时绝对最好的方法。navigationController处理很多事情,比如内存管理、缓存视图以使其快速。你可以继续按ViewController并在退出时弹出它们…

@Murali你的编辑使它更难阅读。请确保你的编辑以一种有意义的方式改进帖子:你为什么说hackish?你能推荐另一种方法在整个应用程序中维护一个实例吗?任何从UIViewController继承的视图控制器都有一个属性navigationController,这意味着如果将所有视图控制器推送到导航堆栈上,他们都可以通过调用self.navigationController访问同一导航控制器。但是,从文档中,如果接收者或其祖先之一是导航控制器的子级,则此属性包含所属的导航控制器。如果视图控制器未嵌入导航控制器中,则此属性为nil。因此,如果不作为navigationViewcontroller的一部分使用。此属性无效。如果如上所述将其用作navigationController的一部分,则当您首次呈现视图控制器时,此字段由IOS设置,您将其推送到导航堆栈上,此时其navigationController属性设置为呈现视图控制器的导航控制器。