2013-07-18 3 views
5

내 요구 사항은 UITabBarController가 rootviewcontroller이고 앱이 처음 실행될 때 UINavCon 내부의 로그인 프로 시저를 보여주고 싶습니다. presentViewController을 통해 표시하고 있습니다.Can [self.window makeKeyAndVisible]; rootviewcontroller를 설정하기 전에 호출해야합니다.

UITabBarController를 처음으로 표시하고 싶지 않으며 UINavCon이 모달로 터지는 방식을 원하지 않습니다.

앱을 처음 시작하면 UINavCon을 볼 수 있어야한다는 사용자 경험을하고 싶습니다. 내가 바로 uiwindowallocinit 후 두 번째 줄에 [self.window makeKeyAndVisible];를 호출하고

- (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; 
} 

: 그래서 여기 내 코드입니다. 그것은 올바른 일입니까 아니면 viewcontroller 이벤트 또는 방향 알림을받지 못하는 같은 문제가 발생할 수 있습니다?

답변

4

언제든지 전화 할 수 있습니다. 이 함수를 호출하면 윈도우의 z- 인덱스 및 화면 속성에 영향을줍니다. 설정중인 특정 콘텐츠에 의존하지 않습니다.

+0

답장을 보내 주셔서 감사합니다. 외부 출력의 경우 일반적으로 단 하나의 uiwindow 만 갖고 있다고 말할 수 있습니까? 다음 uiwindow가 있습니다. 기본적으로 내 경우 uiwindow는 0 인덱스에 있고 사과는 "이것은 수신기를 메인 윈도우로 만들고 다른 윈도우 앞에 표시하는 편리한 방법입니다."라고 말합니다. 다른 창문 앞에 무엇을 의미합니까? –

+0

아무 것도 여러 창을 사용하는 것을 방해하지 않습니다. 예 : 자주 당신은 이미 2 개 이상 .. 당신과 키보드 창을가집니다! –

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]; 
    } 
    

희망이 있으면 도움이 될 것입니다.

+1

답장을 보내 주셔서 감사합니다. 저는 알고 싶습니다. [self.window makeKeyAndVisible]; 언제든지 호출 할 수 있으며, 끝나거나 rootviewcontroller를 설정 한 후에 호출해야합니다. –

+0

처음에 전화하는 데 문제가 있습니까? – HRM

+0

아무 문제도 아직 잘 작동하는 것 같아요,하지만 나중에 문제가 생기고 싶지 않아요. 그래서 내가 지식의 증분을 묻는 이유는 무엇입니까? –

관련 문제