如何从app delegate加载登录视图控制器

时间:2012-03-13 22:27:05

标签: objective-c ios xcode storyboard

这是情况。我在Appdelegate.m中有一个NSTimer,它执行一种检查用户位置的方法,并在他不在某个区域时将其记录下来。当发生这种情况时,我想加载登录视图控制器。但是,通过以下几行代码,我可以看到VC,但是如果我单击要输入的文本字段,我会得到一个sigbart。如何正确地从app委托加载初始VC?

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
            LoginViewController *loginViewController = (LoginViewController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"Login"];
            [self.window addSubview:loginViewController.view];
            [self.window makeKeyAndVisible];

3 个答案:

答案 0 :(得分:12)

我一直在努力解决这个问题。这对我有用

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
LoginViewController *loginViewController = (LoginViewController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"Login"];

//set the root controller to it
self.window.rootViewController = loginViewController

如果您仍然有错误,那么它与您的LoginViewController有关,而不是AppDelegate转换。希望这会有所帮助。

答案 1 :(得分:4)

发烧友和弗拉维乌的方法都可以。但是你们俩都错过了一行额外的代码。

我发现你必须先分配并初始化UIWindow对象。我不知道为什么,但初始化对象解决了问题。

self.window=[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

发烧友的方法:

self.window=[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];

ResultsInListViewController *resultsInListViewController = (ResultsInListViewController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"ResultsInListViewController"];

[self.window addSubview:resultsInListViewController.view];

[self.window makeKeyAndVisible];

Flaviu的方法:

self.window=[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];

ResultsInListViewController *resultsInListViewController = (ResultsInListViewController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"ResultsInListViewController"];

[self.window setRootViewController:resultsInListViewController];

[self.window makeKeyAndVisible];

答案 2 :(得分:1)

这是我想要更改视图时使用的代码:

#import "LoginViewController.h"

LoginViewController *screen = [[LoginViewController alloc] initWithNibName:nil bundle:nil];
screen.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentModalViewController:screen animated:YES];

//or

[self.window addSubView:screen];

使用该代码将创建一个全新的实例并显示它,因此它应该完成您的问题。你可能不得不移动一些东西,但它应该有效。

如果您需要更多帮助,请与我们联系。

希望这能帮到你!