2012-03-28 2 views
2

내 프로젝트에 navigationController가 있지만 전체 프로젝트가 presentViewController를 기반으로하고 여러 단계로 탐색하는 시나리오가있는 경우 popToRootViewController를 사용할 수 있음을 알고 있습니다. 하나의 레벨 만있는 경우 현재보기 컨트롤러를 닫음으로써 루트보기 컨트롤러로 되돌아 갈 수 있지만 둘 이상의 레벨로 내려 갔을 때 루트보기 컨트롤러로 돌아가는 방법을 파악할 수는 없습니다. 누군가 제게 조언 해 주시겠습니까?iOS : presentViewController 아키텍처 용 popToRootViewController

다음 코드를 사용하려고했지만 내 앱이 다운되었습니다.

- (IBAction)mainMenuButtonPressed:(id)sender { 
    MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [self presentModalViewController:delegate.window.rootViewController animated:YES]; 
} 

감사합니다.

답변

4

내가 올바르게 이해했다면 몇 가지 모달 viewcontroller가 표시되고 루트 viewcontroller로 돌아가고 싶습니다. 그건 바로 다음의 경우 다음 코드는 당신을 위해 일해야합니다

- (IBAction)mainMenuButtonPressed:(id)sender { 
    MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [delegate.window.rootViewController dismissModalViewControllerAnimated:YES]; 
} 
+0

을 자네 말이 맞아! 멋지다! 그것은 효과가 있었지만 최상위에 있지 않을 때 rootviewcontroller가 어떻게 작동했는지 궁금합니다. – applefreak

+0

루트 viewcontroller에 의해 표시되는 viewcontroller를 닫으면 즉시이 뷰어가 표시하는 모달 뷰 컨트롤러가 모두 닫히기 때문입니다. 기본적으로 이것은 재귀 호출입니다. – Lukas

+0

흥미 롭군요하지만 컨트롤러가 해산당하는 기분이 들지 않습니다! 그것은 바로 rootviewcontroller에 도착했습니다! – applefreak

0

스위프트 버전

var = APP_DELEGATE = UIApplication.sharedApplication().delegate as! AppDelegate 
APP_DELEGATE.window?.rootViewController?.dismissViewControllerAnimated(true, completion: nil) 

Swift3

let APP_DELEGATE = UIApplication.shared.delegate as! AppDelegate 
      APP_DELEGATE.window?.rootViewController?.dismiss(animated: true, completion: nil) 
관련 문제