2011-08-15 5 views
0

3 개의 UIViewController가 UINavigationController에 있습니다. 어떤 점에서 저는 rootViewController에 가서 새로운 UIViewController를 탐색하려고합니다. 그리고 작동하지 않습니다.iOS - 이상한 탐색 문제?

제안 사항?

- (IBAction)goToRootAndNavigateToViewController 
{ 
    [self.navigationController popToRootViewControllerAnimated:YES]; 

    MyViewController *mvc = [[MyViewController alloc] init]; 
    [self.navigationController pushViewController:mvc animated:YES]; 
    [mvc release]; 

    //This takes me to the rootViewController but it doesn't navigate to MyViewController 
} 

는 performSelector를 사용하려고 : WithDelay :

- (void)goToRootAndNavigateToViewController 
{ 
    [self.navigationController popToRootViewControllerAnimated:YES]; 

    [self performSelector:@selector(doSomething) withObject:nil afterDelay:10]; 
} 

- (void)doSomething 
{ 
    MyViewController *mvc = [[MyViewController alloc] init]; 
    [self.navigationController pushViewController:mvc animated:YES]; 
    [mvc release]; 
} 

답변

0

나는 popToRootViewController 전체 NSRunLoop을 차지 생각합니다.

performSelector:withObject:afterDelay 같은 것을 사용하여 별도의 기능으로 다음보기 컨트롤러를 밀어 넣어야합니다.

은 또는 당신은 항상 당신이 애니메이션이 완료되면 mvc 컨트롤러를 밀어 필요

+0

지연을 추가하면 해커가되고 나에게 필요한 ViewController 설정이 작동하지 않습니다. 내 root viewcontroller를 유지하기 위해 – aryaxt

+0

지연을 설정 해킹. NSRunLoop 내부에서 이러한 메소드를 수행하는 이유 때문에 이러한 메소드가 sdk에 배치됩니다. 원하는 경우 지연 간격을 0.0으로 설정하십시오. 루트 뷰 컨트롤러를 유지하면서 뷰 컨트롤러를 설정하는 것도 문제가되지 않습니다. 그냥 루트보기 컨트롤러에 대한 참조를 저장하고 NSArray의 첫 번째 요소로'setViewControllers : animated'를 전달하면 여전히 루트가됩니다 – cpjolicoeur

+0

지연을 시도했지만 작동하지 않았습니다. 설정을 시도했습니다. 지연 15 초 및 여전히 작동하지 않았다 – aryaxt

0

수동으로 설정하는 [self.navigationController setViewControllers:] 전화를 할 수 있습니다. 첫 번째 애니메이션이 완료되면이를 호출 해보십시오 (예 : - (void)viewDidAppear:(BOOL)animated)

0

이 문제가 발생한 이유는 모르겠지만 루트보기 컨트롤러의 -viewDidAppear: 메서드에서 새보기 컨트롤러를 밀어 넣으십시오. .

0

내보기 컨트롤러가 - (IBAction)goToRootAndNavigateToViewController을 사용하여 현재 가지고있는 것으로 보입니다. 일단 갑자기 나타나면 컨트롤이 손실됩니다. 따라서 연속적인 진술이 작동하지 않게 만든다. 내가 당신이라면

, 안 UINavigationController에서 튀어 될 것입니다 가능성이 발매을 해제 할 수있는 현재의 ViewController에서, 당신의 선택의 rootViewController 항상 이루어집니다 MyViewController 예를 눌러 확인합니다.

아마, 당신은 당신이 MyViewController 인스턴스를 밀어 수 있습니다,이 구현에 rootViewController

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated { 
    // Check the right condition for pushing MyViewController... 
    // if it's YES... 
    MyViewController *mvc = [[MyViewController alloc] init]; 
    [self.navigationController pushViewController:mvc animated:YES]; 
    [mvc release]; 
} 

에 대해 같은 - (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated로를 대리자 메서드 구현을 추가 할 수 있습니다. 한 가지해야 할 일은 조건 플래그가 일종의 조건을 사용하는지 확인하는 것입니다. 그러면 popToRootViewController을 푸시합니다. MyViewController