2013-04-08 4 views
0

사용자가 로그인 할 때마다 인스턴스화하는 로그인 스토리 보드가 있습니다. 실제 스토리 보드가 실제 응용 프로그램입니다.현재보기 컨트롤러가 활성화되어 있음

내 응용 프로그램이 비활성 (응용 프로그램 닫기)으로 설정되고 다시 활성화 (응용 프로그램 다시 열기) 될 때 AppDelegate는 2 분의 시간 초과가 발생했는지 확인합니다. 그렇다면 시간이 초과되었다는 경고를 보여주고 싶습니다.

내가 가진 문제는 사용자가 로그인 화면에서 메시지를 표시하고 싶지 않다는 것입니다. Storyboard는 TabBarController를 사용하기 때문에 유효한 탐색 컨트롤러가 없습니다. LoginViewController가 현재 App Delegate로부터 보여지고 있는지 어떻게 알 수 있습니까? 가장 많이보기 컨트롤러의 클래스 이름을 얻으려면 어떻게해야합니까?

있는 navigationController은 참고하시기 바랍니다

답변

1

첫째, 당신은 UITabBarController가에 대한 참조를 가질 필요가 null입니다. IB에서 초기보기 컨트롤러로 설정하면 매우 쉽습니다. 스토리 보드를 열고 UITabBarController 왼쪽에있는 작은 회색 화살표를 찾으십시오. 그렇다면, 단순히 이렇게 : 당신은 또한 직접 TabBarController를 조회 할 수 있습니다

[myTabBarController objectAtIndex:index]; 

:

NSLog(@"Selected view controller class type: %@, selected index: %d", [myTabBarController selectedViewController], [myTabBarController selectedIndex]); 
당신이 UITabBarController가를 사용하는 경우

UITabBarController *myTabBarController; 
if ([_window.rootViewController isKindOfClass:[UITabBarController class]]) { 

    NSLog(@"This window's rootViewController is of the UITabBarController class"); 

    myTabBarController = (UITabBarController *)_window.rootViewController; 

} 

, 당신은을 통해 그 자식 UIViewControllers에 대한 참조를 얻을 수 있습니다

프로그래밍 방식 또는 IB (가장 왼쪽 탭 = 인덱스 0)에 관계없이 0부터 시작하는 인덱싱 체계는 탭의 순서를 따릅니다. 당신이 당신의 UITabBarController가에 대한 참조를 일단

가, 나머지는 아주 간단하다

LoginViewController* myLoginViewController; 

if(![[myTabBarController selectedViewController] isKindOfClass:[LoginViewController class]){ 
    //If the currently selected ViewController is NOT the login page 
    //Show timeout alert 
} 
+0

는 AppDelegate에 근무하는 동안, 내가 viewDidAppear의 로그인 화면을 이동 버그를 가진 후 같은 일을하고 결국 테스트 (릴리스)에서 때때로 실패합니다. 나는 이걸 처음 보았 더라면 좋았을 텐데, 그 대답은 아주 좋았어. 무슨 일이 있었는지, 나는 로그인을위한 독립적 인 스토리 보드와 실제 앱의 메인 스토리 보드를 가지고있다. 좋은 답변 주셔서 감사합니다 ... –

관련 문제