5

我的要求是 UITabBarController 是 rootviewcontroller 并且在应用程序启动的第一次我想显示 UINavCon 内部的登录过程,我通过presentViewController.

我不希望 UITabBarController 第一次可见,也不希望登录 UINavCon 以模式弹出。

我想让用户体验,如果应用程序首次登录 UINavCon 应该是可见的。所以这是我的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

[self.window makeKeyAndVisible];//is it correct to call it here?

LoginVC *loginObj = [[LoginVC alloc]init];

self.navigationController = [[UINavigationController alloc] initWithRootViewController:cellPhoneNumber];

self.tabBarController = [[UITabBarController alloc]init];

self.window.rootViewController = self.tabBarController;

[self.tabBarController presentViewController:self.navigationController animated:NO completion:^{}];

return YES;
}

之后我[self.window makeKeyAndVisible];马上打电话给二线uiwindow alloc init。这样做是否正确,或者我会遇到诸如视图控制器未接收事件或方向通知之类的问题?

4

2 回答 2

5

您可以随时调用它。调用它会影响窗口的 z-index 和 screen 属性。它不依赖于设置的任何特定内容。

于 2013-07-18T07:45:29.810 回答
5

您还没有提到通过使用您的实现是否使代码正常工作。无论如何,我最近做了类似的实现,我们需要在登录后展示登录控制器和 tabBarController,所以只是分享我的实现。

  1. 创建您的登录控制器并将其呈现在didFinishLaunching方法中。

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    LoginController *loginCObj= [[[MainScreenController alloc]init]autorelease];
    UINavigationController *navigationControllerObj = [[[UINavigationController alloc]initWithRootViewController:loginObj]autorelease];
    self.window.rootViewController = navigationControllerObj;
    [self.window makeKeyAndVisible];
    
  2. 在登录视图控制器中成功登录之后,调用 appDelegate 公共方法

    在登录控制器中

    AppDelegate *appDel = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    [appDel  applicationLoggedInSuccesfully];
    

    在您的 appDelegate 文件中,添加如下方法:

    -(void)applicationLoggedInSuccesfully{
        UINavigationController *nv1 = [[[UINavigationController alloc] initWithNibName:nil bundle:nil]autorelease];
        TabController1 *v1 = [[[TabController1 alloc] initWithNibName:nil bundle:nil]autorelease];
        [nv1 pushViewController:v1 animated:NO];
    
        UITabBarController *tabController = [[[UITabBarController alloc] init]autorelease];
        tabController.viewControllers = @[nv1];
        tabController.delegate = self;
        self.window.rootViewController = tabController;
        [self.window makeKeyAndVisible];
    }
    

希望它会帮助你。

于 2013-07-18T06:32:16.983 回答