2

현재 내비게이션 컨트롤러를 사용하는 앱을 작성 중입니다. 임베디드 컨트롤러에서 첫 번째보기 컨트롤러의 초기보기로 이동해야합니다.초기보기 컨트롤러 팝업

이 줄의 코드가 바로 임베디드있는 navigationController의 초기보기에 저를 반환 :

[self.navigationController popToRootViewControllerAnimated : YES];

아이디어가 있으십니까?

+1

당신이 응용 프로그램 당신의 계층 구조를 말할 수와 위치를 팝업 하시겠습니까? – KudoCC

+0

알아 낸 경우. 방금 교체했습니다. [self.navigationController. popToRootViewControllerAnimated : 예]; 과 [self.navigationController.navigationController popToRootViewControllerAnimated : YES]; – user3250926

+0

navigationController UIViewController 속성은 "탐색 컨트롤러 인 뷰 컨트롤러 계층에서 가장 가까운 조상"을 반환합니다. 그것은 당신이 다른 하나의 자식 컨트롤러입니다 두 탐색 컨트롤러가있는 것 같습니다. – KudoCC

답변

5

이와 같은 재귀 함수를 사용할 수 있습니다. 편의를 위해 카테고리를 원하는대로 지정하거나 이름을 지정하십시오.

- (void)recursivePop:(UIViewController *)viewController 
{ 
    if (viewController.navigationController) 
    { 
     [viewController.navigationController popToRootViewControllerAnimated:YES]; 
     [self recursivePop:viewController.navigationController]; 
    } 
} 

그런 다음보기 컨트롤러에서 이것을 이렇게 호출하여 호출하려고합니다.

[self recursivePop:self]; 
0

스위프트 버전 :

func recursivePop(controller: UIViewController?){ 

    if let controller = controller { 
     if let nav:UINavigationController = controller.navigationController { 
      nav.popToRootViewControllerAnimated(true) 
      self.recursivePop(controller) 
     } 

    if let split:UISplitViewController = controller.splitViewController { 
      if let nav:UINavigationController = split.navigationController { 
       nav.popToRootViewControllerAnimated(true) 
       self.recursivePop(controller) 
      } 
     } 
    } 
} 
+1

splitcontroller 섹션의 내부를 self.recursivePop (split)으로 대체하면 간단해질 수 있다고 생각하십시오. – GregP