1

내 응용 프로그램에 로그인보기,로드보기, 분할보기 및 메뉴보기가 있습니다. 출시에ViewController 계층 구조 - 스택에서 UISplitviewController 제거

view flow

는 초기보기는 로그인 한 도면이다. 사용자가 성공적으로 로그인하면로드보기로 진행합니다. 데이터가로드되면 분할 뷰를 표시합니다. 분할 뷰에는 모달로 제공되는 메뉴가 있습니다. 메뉴 옵션에는 로그 아웃이 있습니다. 사용자가 로그 아웃하면 로그인보기로 돌아가고 싶습니다. 여태까지는 그런대로 잘됐다.

뷰 계층을 검사 할 때 분할 뷰는 여전히 로그인 뷰 아래에 있습니다. 이론적으로 사용자는 이러한 방식으로 무한 수의 계층화 된보기가있는 상황을 만들 수 있습니다.

stacked views

어떻게 다시 로그인보기로 사용자를 얻고 분할보기를 기각 할 수 있습니까?

스토리 보드와 단절을 사용하여 분할보기를 사용 중입니다. 로그인 뷰는 분할 뷰로 푸시하는로드 뷰를 푸시합니다. 사용자 모달 프레젠테이션 컨트롤러에 모달 메뉴를 표시합니다.

답변

1
  //VC1 


      -(IBAction)button_click:(id)sender 
      { 
       UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
       ViewController2 *viewController2 = [storyboard instantiateViewControllerWithIdentifier:@"VC2"]; 

       [self.navigationController pushViewController:viewController2 animated:YES]; 
      } 


      //VC2 


      -(IBAction)button_click:(id)sender 
      { 

       UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
       ViewController3 *viewController3 = [storyboard instantiateViewControllerWithIdentifier:@"VC3"]; 

       [self.navigationController pushViewController:viewController3 animated:YES]; 

      } 

      //VC3 
    // In .h file 
    @interface ViewController3 : UIViewController<ViewController4Delegate> 

    -(IBAction)button_click:(id)sender; 

    @end 

     //In .m file 
      -(IBAction)button_click:(id)sender 
      { 
       UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
       ViewController4 *viewController4 = [storyboard instantiateViewControllerWithIdentifier:@"VC4"]; 

       viewController4.delegate=self; 

       [self.navigationController presentViewController:viewController4 animated:YES completion:nil]; 
      } 

      -(void)completed 
      { 
       [self.navigationController popToRootViewControllerAnimated:YES]; 
[self.parentViewController.parentViewController dismissViewControllerAnimated:YES completion:nil]; 
      } 

      //VC4 
      //In .h file 
      @protocol ViewController4Delegate 

     -(void)completed; 

     @end 

     @interface ViewController4 : UIViewController 

     -(IBAction)button_click:(id)sender; 

     @property(nonatomic,weak) id <ViewController4Delegate> delegate 

     //In.m file 
      -(IBAction)button_click:(id)sender 
      { 


       [self dismissViewControllerAnimated:NO completion:^{ 

        if(delegate) 
        { 
         [delegate completed]; 
        } 

       }]; 
      } 
+0

흠. 작동 안함. 모달은 지워지지 만 분할보기는 지워지지 않습니다. 모달보기는 사용자가 로그 아웃 할 때 상세보기에 알림을 사용하도록 설정됩니다. 자세히보기에서 알림을 받으면 NSLog (@ "rootview : % @", [self.view.window rootViewController]);를 사용하고 있으며 로그인보기를 루트로보고하고 있습니다. 완료 블록을 사용하거나 사용하지 않고 시도했으며 두 버전 모두 로그인보기를 표시하지 않습니다. – BBruce

+0

5 분 줘야 겠어. – Shashi3456643

+0

이제 제대로 작동하는지 확인하십시오. – Shashi3456643

0

이 ViewController 계층 구조에 대한 탐색 컨트롤러가 있습니까?

LoginView가 네비게이션 컨트롤러의 rootViewController로 설정되고 LoadingView와 SplitView가 네비게이션 스택에 "푸시"되면 모달을 닫을 수 있습니다. 완료 블록에서 로그인 컨트롤러가 될 루트 뷰 컨트롤러 ->에 팝업 할 수 있습니다.

그래서에서 당신의 LogoutModal 사용자가 로그 아웃 버튼을 클릭 처리기에서이 작업을 수행 할 것입니다 : 이것은 곧 그이 완료되는 다음 모달을 일축하고

[self.presentingViewController dismissViewControllerAnimated:YES completion:^{ 
    [self.presentingViewController.navigationController popToRootViewControllerAnimated:YES]; 
}]; 

, 그것은 다시 탐색 스택 모든 방법을 팝업 루트보기 컨트롤러.