gpt4 book ai didi

iphone - 在应用程序启动时从 Storyboard中选择替代的第一个 View Controller

转载 作者:行者123 更新时间:2023-12-03 18:23:25 27 4
gpt4 key购买 nike

我刚刚开始进行 iOS 编程,到目前为止,我在这里找到的教程和答案对我的前进有很大帮助。然而,这个特殊的问题困扰了我一整晚,我找不到“感觉正确”的答案。

我正在编写一个连接到远程服务的应用程序,用户需要登录才能使用它。当他们开始使用应用程序时,他们的第一个 View 应该是登录对话框;当他们之前进行身份验证时,他们会立即看到概述页面。

该项目使用 Storyboard - 我认为这是一个很棒的功能 - 因此大多数选择和加载 Root View Controller 的代码已经被处理。我认为添加逻辑的最佳位置是 AppDelegateapplication:didFinishLaunchingWithOptions: 方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
(NSDictionary *)launchOptions
{
// select my root view controller here based on credentials present or not
return YES;
}

但这提出了两个问题:

  1. 在这个特定的委托(delegate)方法中, Root View Controller 已经根据 Storyboard被选择(并加载?)。我可以移动到加载过程中的较早位置来覆盖第一个 View Controller 选择吗?或者这会使事情不必要地复杂化吗?

  2. 要覆盖第一个 View Controller ,我需要对 Storyboard的引用,但我找不到比使用 storyboardWithName:bundle: 构造函数更好的方法UIStoryboard。这感觉不对,应用程序应该已经有对 Storyboard的引用,但是我如何访问它?

更新

我解决了遇到的第二个问题,因为我在这里找到了答案:

UIStoryboard: What's the Correct Way to Get the Active Storyboard?

NSBundle *bundle = [NSBundle mainBundle];
NSString *sbFile = [bundle objectForInfoDictionaryKey:@"UIMainStoryboardFile"];
UIStoryboard *sb = [UIStoryboard storyboardWithName:sbFile bundle:bundle];

上面将创建一个新的 Storyboard实例;要获取事件实例,要简单得多:

UIStoryboard *sb = [[self.window rootViewController] storyboard];

在 Storyboard文件本身中,您必须为要加载的 View 设置一个标识符,例如登录对话框。然后你像这样实例化 View :

LoginViewController *login = [sb instantiateViewControllerWithIdentifier:@"LoginDialog"];
[self.window setRootViewController:login];

在另一个 View Controller 中,以下内容就足够了:

UIStoryboard *sb = self.storyboard;
LoginViewController *login = [sb instantiateViewControllerWithIdentifier:@"LoginDialog"];
[self presentViewController:login animated:NO completion:nil];

最佳答案

您只需重置窗口的 Root View Controller 即可

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
(NSDictionary *)launchOptions
{
if(your_condition) {
UIViewController *newRoot = [your implementation];
self.window.rootViewController = newRoot;
}
return YES;
}

这对我有用,Xcode5.0.1

关于iphone - 在应用程序启动时从 Storyboard中选择替代的第一个 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10827010/

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