【问题标题】:IOS 5 Opening a specific ViewController from the AppDelegateIOS 5 从 AppDelegate 打开一个特定的 ViewController
【发布时间】:2012-08-15 09:11:37
【问题描述】:

我对 IOS 真的很陌生,所以如果这个问题措辞不明确,我深表歉意。我已经尝试过四处搜索,但我没有找到我要找的确切内容。

基本上在我的 AppDelegate applicationDidBecomeActive 方法中,我正在调用我的 web 服务以确保用户仍然是有效用户,并拉下一些刷新的数据,或者如果它们不是,则将它们踢回登录页面有效期更长。

我遇到问题的部分是第二部分。当发现用户无效时,如何加载和显示特定的 ViewController(在本例中为 loginViewController)?我想让正常的 viewController 流程​​在它们有效时发生,这很好,但是当我需要从 AppDelegate 启动特定的 viewController 时,我不知道如何启动。

有什么想法吗?

我想我明白了!我在 AppDelegate 中使用了这段代码来显示我需要的 ViewController。

UIViewController *loginController = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"];
    UINavigationController *loginNavController = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:@"LoginNavController"];
    UIViewController *currentVC = self.window.rootViewController;
    _window.rootViewController = loginNavController;
    [currentVC presentViewController:loginNavController animated:NO completion:nil];

【问题讨论】:

标签: ios ios5 appdelegate


【解决方案1】:

为简单起见,假设您有一个单视图应用程序(不是导航控制器,不是标签栏控制器 - 解决方案可扩展但更易于解释)。当您收到应用程序启动的 appDelegate 消息时,将 UIImageView 设为根视图并显示您的启动图像(用户认为您仍在启动)。尝试登录,并在其他对象(不是视图控制器)中执行此操作。如果你成功了,你将你想要的视图设置为 rootView,并且用户可以看到它。如果登录失败,则将登录窗口设为 rootView。这里的关键是要有一个对象来驱动它并且可以与 appDelegate 交互。您还可以将此功能添加到 appDelegate 本身。

【讨论】:

  • 我很确定这是我遵循的逻辑,但是我不知道如何从该对象或 appDelegate 显示特定视图(为了简化测试,我现在正在这样做)。抱歉,我忘了提到我正在使用导航控件,所以不确定这是否会更改代码。我的 loginViewController 有一个 NavigationController 与之相连,这就是我想要启动的视图。
  • 我使用 appDelegate 在 tabbarController 内的导航控制器中切换视图。这里的关键是“viewControllers”数组。如上所述,您可以使用 UIImageView 创建第一个数组,然后将 viewControllers 数组设置为包含一个对象、loginViewController 或其他对象的数组。
  • 对不起,我现在才关注你,我不认为。也许我一直在尝试的这个源代码会有所帮助。 [代码] LoginViewController *loginViewController = [[LoginViewController alloc]init]; UINavigationController *navController = [loginViewController.storyboard instantiateViewControllerWithIdentifier:@"LoginNavController"]; navController.view = loginViewController.view; _window.rootViewController = 导航控制器; [代码]
  • 对不起,我不知道怎么把代码块放在这里。
  • 编辑您的原始问题。将代码粘贴到那里的底部。然后选择该文本并点击文本块顶部的“()”图标。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 2020-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多