2012-01-18 2 views
5

내비게이션 컨트롤러의 문제점에 대해 약간의 도움이 필요합니다.popToRootViewControllerAnimated가 루트보기 컨트롤러를 표시하지 않습니다.

저는 navigationController과 4 ViewControllers 푸시되었습니다. 마지막으로 내가 밀어 넣은 것보다 더 ViewController을 선물한다. 모달 ViewControllerActionSheet입니다. 사용자의 대답에 따라 모달 ViewController 만 기각하거나 루트 ViewController으로 다시 가고 싶습니다. 제시 ViewController에서

모달 내가 가진 : 마지막 ViewController에서

- (void) dismissGameReport 
{  
    [[self delegate] GameReportModalWillBeDismissed:modalToPopToRoot];  
} 

는 내가 가지고있는 navigationController 스택으로 푸시 :

- (void)GameReportModalWillBeDismissed: (BOOL)popToRoot; 
{  
    if (popToRoot) 
     { 
     [self.navigationController popToRootViewControllerAnimated:NO]; 
     } 
    else 
     { 
     [self dismissModalViewControllerAnimated:YES]; 
     }    
} 

컨트롤러가 잘 작동 모달 뷰를 일축. 그러나 ,

[self.navigationController popToRootViewControllerAnimated:NO]; 

는보기를 표시하는 루트 ViewController가 발생하지 않습니다. 일부 로그 정보 추가 메시지가 표시된 후 self.navigationController에 스택이 제대로 표시되지만 실행은 순차적으로 계속됩니다. 화면에는 여전히 모달 ViewController의보기가 표시됩니다.

해결 방법 나는 항상 모달보기 컨트롤러를 해제하고 ViewWillAppear 메서드는 메시지가 있습니다. 차이 없음. 여전히 컨트롤러 스택이 튀어 나오지 만 화면은 계속해서 모달 뷰 컨트롤러의 뷰를 보여 주며 순차적으로 실행이 계속됩니다.

누군가 나를 도와 줄 수 있습니까?

+0

컴파일러가 루프에 들어가는 중단 점을 사용하여 디버그하려고합니까? – Hiren

답변

6

나는이 거짓된 질문을 좋아합니다. 당신이 그것을 시도 할 때까지는 매우 간단 해 보입니다.

내가 발견 한 것은 기본적으로 모달 뷰 컨트롤러를 닫을 필요가 있지만 다음 줄의 네비게이션 컨트롤러에서 튀어 나오려고 할 때 상황이 뒤섞이는 것입니다. 팝업을 시도하기 전에 해고가 완료되었는지 확인해야합니다. iOS 5에서는 dismissViewControllerAnimated:completion:을 사용할 수 있습니다.

하지만 질문 태그에는 4.0이 있습니다. 내가 찾은 해결책은 <iOS 5이지만, 여전히 효과적 일 것입니다. 그리고 이미 당신이 흔적을 남겼던 것처럼 들립니다. viewDidAppear:이 아니라 viewWillAppear:이 필요합니다. 당신의 GameReportModalWillBeDismissed: 이런 식으로 뭔가 보일 것 다음

BOOL shouldPopToRootOnAppear; 

과 : 내 솔루션은 여기에 바르를 포함, 말할 수

-(void)GameReportModalWillBeDismissed:(BOOL)popToRoot{  
    shouldPopToRootOnAppear = popToRoot; 
    [self dismissModalViewControllerAnimated:YES];   
} 

을 그리고 당신의 viewDidAppear:이 ... 같을 것이다

-(void)viewDidAppear:(BOOL)animated{ 
    [super viewDidAppear:animated]; 
    if (shouldPopToRootOnAppear){ 
     [self.navigationController popToRootViewControllerAnimated:YES]; 
     return; 
    } 
    // Normal viewDidAppear: stuff here 
} 
+0

안녕하세요. 대단한 !!! 그것은 매력처럼 작동했습니다. 고마워, 내 코드로 주변을 둘러 보던 것은 4 일이 넘었습니다. 다시 한번 감사드립니다. – DanL

+0

stackoverflow.com에 오신 것을 환영합니다. 기꺼이 도와주세요. 이 대답으로 문제가 해결되면 문제를 받아 들여야합니다. – NJones

관련 문제