可以[self.window makeKeyAndVisible];在设置rootviewcontroller之前调用

时间:2013-07-18 06:07:30

标签: ios objective-c uiviewcontroller appdelegate uiwindow

我的要求是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。这样做是否正确,或者我可能遇到像viewcontroller没有接收事件或方向通知的问题?

2 个答案:

答案 0 :(得分: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];
    }
    
  3. 希望它会对你有所帮助。

答案 1 :(得分:4)

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