gpt4 book ai didi

ios - 在启动时从导航堆栈中实例化 View Controller

转载 作者:行者123 更新时间:2023-11-29 10:40:52 25 4
gpt4 key购买 nike

我有一个这样的应用

Navigation controller -> login controller -> main view controller -> other stuff

我想尝试在 applicationdidfinishloadingwithoptions 中登录,如果成功则加载主视图 Controller ,否则加载登录 View Controller 。我的问题是无论如何我都希望导航堆栈像上面一样保持完整,这样我就可以在我想注销时返回到我的登录 View Controller 。

现在我尝试在成功登录时实例化主视图 Controller ,但在注销和其他导航时它会提示我没有嵌入导航 Controller 。

正确的做法是什么?

最佳答案

如果您正在使用 Storyboard,那么首先为登录创建一个 UIViewController 并为其提供一个 Storyboard ID,其次创建您的 mainViewController 并将其嵌入到 UINavigationController 中并提供 Storyboardid 到 UINavigationController

之后,在 AppDelegate.m 的 applicationdidfinishloadingwithoptions 中,根据用户登录或未登录加载适当的 VC。

例子

// Check if user is logged in
if ([[NSUserDefaults standardUserDefaults] stringForKey:@"loggedIn"] == NULL || [[[NSUserDefaults standardUserDefaults] stringForKey:@"loggedIn"] isEqualToString:@"false"]) {
// show login page
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

UIViewController *mainViewController = [storyboard instantiateViewControllerWithIdentifier:@"login"];

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = mainViewController;
[self.window makeKeyAndVisible];
} else {

// show home page
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *mainViewController = [storyboard instantiateViewControllerWithIdentifier:@"home"];

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = mainViewController;
[self.window makeKeyAndVisible];
}

编辑

所以你的栈会变成这样

NavController->mainVC->OtherStuff

独立的

LoginVC

关于ios - 在启动时从导航堆栈中实例化 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24623574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com