将登录屏幕显示为模态视图

时间:2011-07-24 20:37:55

标签: iphone ios modalviewcontroller

我正在开发一个可以在不立即登录的情况下使用的应用程序,但某些选项卡需要登录。因此,每当打开这些选项卡时,我都想让我的登录视图向上滑动。如果用户点击登录视图中的“取消”按钮,则应取消模态窗口,并且应该返回到之前用户所在的同一视图。如果登录成功,则应关闭该窗口并加载选项卡。实现这个的最佳方法是什么?我应该制作自定义标签栏控制器吗?

编辑:我采用了咖啡因的方法。这似乎对我有用:

// App delegate

#pragma mark - UITabBarController delegate

- (BOOL)tabBarController:(UITabBarController *)tabBarController
          shouldSelectViewController:(UIViewController *)viewController {
  if ([[viewController topViewController] loginRequired]) {
    LoginViewController *loginViewController = [[LoginViewController alloc] init];
    UINavigationController *navController = [[UINavigationController alloc]
      initWithRootViewController:loginViewController];
    [tabBarController presentModalViewController:navController animated:YES];
    [loginViewController release];
    [navController release];
    return NO;
  } else {
    return YES;
  }
}

3 个答案:

答案 0 :(得分:1)

您可以尝试实施tabBarController:shouldSelectViewController的{​​{1}}。从该委托方法中提供模态登录控制器,如果成功则返回YES,否则返回NO。

答案 1 :(得分:1)

  1. 将tabBarController设为rootViewController

  2. LoginController创建课程和视图。

  3. 在要启动的第一个标签中(或您需要模态视图的标签)转到viewDidLoad方法并参考LoginViewController并使用

     LoginController *lvc = [[LoginController alloc]initWithNibName:@"LoginController" bundle:[NSBundle mainBundle]];
    
         UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:LoginController];
    
    
     [self presentModalViewController:navController animated:NO];
    
      // This gives navigation control to the login controller //
    
  4. 如果登录成功,您可以执行[self dismissModalViewControllerAnimated:YES];

  5. 如果登录失败,您可以导航到ForgotLoginController进行密码恢复或仅popToRootViewController并返回上一个屏幕或弹出到导航堆栈中的第一个视图并保持登录选项。

答案 2 :(得分:0)

您可以简单地使用TabBarController delegate methods来检测选项卡更改,然后存储选定的索引供以后使用。