본문 바로가기
개발/iOS

한꺼번에 모든 모달 닫기

by GreatCoding 2015. 1. 22.

iOS 에서 스토리보드를 사용하여 App 개발중 아래와 같은 상황이 발생하였다.

 

1. SettingViewController를 Present Modally로 띄움

2. SettingViewController에서 로그아웃 버튼을 누름

3. 로그아웃 절차 진행 후 LoginViewController가 나타남

4. 다시 로그인을 할 경우 모든 모달이 닫히고(이 경우 SettingViewController) RootViewController가 나타남

 

위와같은 케이스의 해결을 위해

[self performSegueWithIdentifier:@"LoginSegue" sender:self];가 호출된 직후

 

[self dismissViewControllerAnimated:true completion:nil];를 호출하거나

 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;에서

[self dismissViewControllerAnimated:true completion:nil];를 호출했었지만,

LoginViewController 조차 뜨지 않는 상황이 발생하였다.

이 후, LoginViewController에서 SettingViewController를 닫기위해 여러가지를 시도했지만 번번히 실패.
해결법은 로그인 성공 시

- (void)closeAllModal

{

    UIViewController* vc = self;

    

    while (vc) {

        UIViewController* temp = vc.presentingViewController;

        if (!temp.presentedViewController) {

            [vc dismissViewControllerAnimated:YES completion:^{}];

            break;

        }

        vc =  temp;

    }

}

위의 코드를 LoginViewController에서 실행해주면 모든 모달이 깔끔하게 다 닫힌다.

 

출처 : http://stackoverflow.com/questions/12849648/how-to-dismiss-all-the-modal-views

 

 

댓글