我正在学习iOS并开发我的第一个iPone应用程序。我想给我的应用程序添加一个功能:如果用户以前登录过,我想将用户重定向到主视图。否则,我想将用户重定向到登录视图。
我读过ios change storyboard default view controller at run time,但我想知道我是否可以用AppDelegate编写决定根视图的代码。因此,我不会有一个永远不会推出的视图。
这是我在AppDelegate中的代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
MainViewController *rootVC = [[MainViewController alloc] init];
if (userNeverLogin) {
LoginViewController *rootVC = [[LoginViewController alloc] init];
}
self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:rootVC];
return YES;
}此代码不起作用(它不会触发任何错误,但在模拟器中不会显示任何内容)。我该怎么修改呢?或者在AppDelegate中不可能做到这一点?
很抱歉,我是iOS的新手。我希望这个问题不是愚蠢的。
发布于 2012-11-30 14:51:05
我终于在Conditionally start at different places in storyboard from AppDelegate的@followben中找到了我想要的答案。这是他的示例代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
BOOL isLoggedIn = ...; // from your server response
NSString *segueId = isLoggedIn ? @"MainIdentifier" : @"LoginIdentifier";
self.window.rootViewController = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:segueId];
return YES;
}设置视图控制器标识符的方法:

我给@ekims和@X斜杠加了+1,因为你的讨论很有启发性。由衷地感谢你们。
发布于 2012-11-29 13:19:16
我会尝试将您想要显示的视图控制器的整个初始化放入if-else语句中。您将rootVC设置为MainViewController类型,然后如果用户尚未登录,则尝试将rootVC更改为LoginViewController类型
例如
id rootVC = nil;
if (userNeverLogin) {
rootVC = [[LoginViewController alloc] init];
} else {
rootVC = [[MainViewController alloc] init];
}
self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:rootVC];不显示的视图的更新
如果您还没有创建使用nib名称初始化视图控制器的方法(其他人建议您这样做),那么还有另一种解决方法。单击您的MainViewController.xib,然后在界面生成器中单击File Owner。单击实用工具侧栏(屏幕右侧)中左起的第三个图标Identity Inspector,并将自定义类更改为MainViewController。对你的LoginViewController.xib做同样的事情
发布于 2012-11-29 13:30:46
在代码中,
MainViewController *rootVC = [[MainViewController alloc] init];
if (userNeverLogin)
{
LoginViewController *rootVC = [[LoginViewController alloc] init];
}
self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:rootVC];rootVc将始终为MainViewController,因为如果userNeverLogin为true,则该if块内的rootVC仅用于if块作用域,因此请执行如下操作
id rootViewController = nil;
if (userNeverLogin)
{
rootViewController = [[LoginViewController alloc] init];
}
else
{
rootViewController = [[MainViewController alloc] init];
}
self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:rootViewController];https://stackoverflow.com/questions/13619221
复制相似问题