如何通过编程方式加载UIViewController

4
我有以下代码,我想要加载UIViewController。如何初始化和加载UIViewController?
- (void) applicationDidFinishLaunching:(UIApplication*)application
{

    CC_DIRECTOR_INIT();

    NSLog(@"applicationDidFinishLaunching");

    MainViewController *controller = [[MainViewController alloc] init]; 





}
5个回答

4

如果您有 IBOutlet UIWindow *window,您可以通过委托来执行此操作:

[window addSubview:[controller view]];
[window makeKeyAndVisible];

一旦控制器被加载,您可以从UIViewController中推送其他控制器:

controller = [[MainViewController alloc] init];
[[self navigationController] pushViewController:controller animated:YES];

这是一个关于UINavigationController.pushViewController的文档链接:http://developer.apple.com/library/ios/documentation/UIKit/Reference/UINavigationController_Class/Reference/Reference.html#//apple_ref/occ/instm/UINavigationController/pushViewController:animated

4
TestViewController *testController = [[TestViewController alloc] init];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self.window setRootViewController:testController];
[self.window makeKeyAndVisible];

虽然添加子视图是可行的,但除非将控制器设置为RootViewController,否则会收到以下警告:

应用程序窗口在应用启动时需要具有根视图控制器


2

你是否使用nib文件来设置视图的用户界面?您目前的代码确实会加载和初始化ViewController。但是您仍然需要向视图添加一些用户界面元素,并在应用程序中呈现该视图控制器。如果您正在使用nib文件进行用户界面设计,则需要:

MainViewController *controller = [[MainViewController alloc] initWithNibName:@"nibFileName" bundle:nil];

这将把你的控制器与nib文件关联起来。如果您没有使用nib文件,则需要以编程方式添加要显示的每个元素。

设置视图后,您需要通过将其作为子视图添加到当前视图或使用navigationController推送新的viewController来呈现视图控制器。您需要更具体地说明您要做什么。


0

我认为你想要添加的是:

[[NSBundle mainBundle] loadNibNamed:@"nibWithMainViewControllerAsOwner" owner:controller options:nil];

loadNibNamed:owner:options: 是 UIKit 中添加到 NSBundle 的唯一方法。请参见 NSBundle UIKit Additions Reference。如果存在与插座未正确连接的问题,请检查所有插座是否符合键值编码兼容性(另一种答案:确保它们正确地公开为属性)。


0

[viewController view]

这就是如何加载viewController。当访问视图时,它会被延迟加载。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接