2014-02-06 3 views
2

나는 iOS 플랫폼 용 회전 기반 게임을 작성 중입니다. 클라이언트는 CocoaAsyncSocket API를 사용하여 원격 서버와 통신합니다. 지금은이 경우에 대해 작업합니다. 클라이언트는 잠시 동안 비활성 상태 였고 제한 시간으로 인해 서버와의 연결이 끊어졌습니다. 이 경우 앱이 포 그라운드로 들어갈 때 로그인보기로 다시 돌아와서 사용자가 다시 로그인 할 수있게하려고합니다.루트보기 컨트롤러로 돌아 가기

나는 내 애플 리케이션의 델리게이트의 - (void) applicationWillEnterForeground에서 이런 종류의 작업을해야한다고 가정한다. 내가 연결되어 있는지 여부를 확인하는 것은 문제가되지 않지만 모든 프리젠 테이션보기 컨트롤러를 닫아 루트보기 (로그인보기 일 수 있음)로 다시 전환하는 방법을 모르겠습니다.

내보기 컨트롤러는 모달로 표시되지만 밀어 넣기를 포함한 테이블보기가있는 두 개의 탐색 컨트롤러도 있습니다.

이 문제에 대한 도움을 주실 수 있습니다. 미리 감사드립니다!

+1

보기 컨트롤러를 조금 설명해주세요. 루트보기 컨트롤러 (nav 컨트롤러, 사용자 정의) 란 무엇입니까? 벤처 캐피털 (VC)이 밀려 나/제시 되었습니까? – Wain

+0

편집 완료, Wain. –

+0

그냥 정신 테스트 - 당신 시도해 봤어 UINavigationController - (NSArray *) popToRootViewControllerAnimated : (BOOL) animated? – rist

답변

3

이렇게하는 방법은 rootViewController를 새로운 로그인보기 컨트롤러로 바꾸는 것입니다.

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
    if ([self isDisconnected]) { 
     self.window.rootViewController = [MyLoginController new]; 
    } 
} 

스토리 보드의 경우 초기 스토리 보드가 로그인 스토리 보드라고 가정합니다.

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
    if ([self isDisconnected]) { 
     UIStoryboard *storyboard = self.window.rootViewController.storyboard 
     self.window.rootViewController = [storyboard instantiateInitialViewController]; 
    } 
} 

사용자의 UX에 따라 적절하지 않을 수도 있습니다.

2

콘텐츠 뷰 모두 (좋은 아이디어 같은 소리하지 않습니다) 루트 뷰 컨트롤러에서 모달되게됩니다 경우 (실제로 applicationWillEnterForeground에서) 응용 프로그램 위임,

// if we need to login 
UIViewController *rootViewController = self.window.rootViewController; 
[rootViewController dismissViewControllerAnimated:YES completion:nil]; 

루트의 경우에서 보기 컨트롤러가 모달로 표시되지 않으면 적절한 방식으로 해제해야합니다. 다른 '하위'보기 컨트롤러가 모달로 표시되면 해제해야합니다. 해당보기 컨트롤러 변경 부모보기 컨트롤러가 작동하지 때 해산 것 같아요. 모든보기 컨트롤러에게 모든 것이 찢어 졌음을 알리기 위해 알림을 추가해야 할 수도 있습니다.

+0

고맙습니다. 그냥 질문입니다 - 루트보기에서 모든 것을 모달로 표현하는 것이 왜 나쁜 생각입니까? 뷰의 계층 구조가 있는데, 모두 루트 뷰의 맨 위에 스택으로 빌드됩니다. 어떻게 할 건데? –

+0

중첩 된 모달 디스플레이가 있고 잘못된 레벨에서 잘못된 것을 버리면 쉽고 실수로 전체 앱 콘텐츠를 닫을 수 있습니다. 테스팅은 이것을 잡아야하지만 푸시 된 뷰 또는 커스텀 자식 뷰보다 잘못되는 것이 더 쉽습니다. 앱을 모르지만 사용자 정의 컨테이너보기 컨트롤러 나 탐색 컨트롤러를 개인적으로 생각할 것입니다. – Wain

관련 문제