После закрытия viewController popViewController не будет работать

Я застрял в сценарии: посмотрите на эту картину:

У меня есть soundPlayerVC в качестве childeViewController из pageContentVC.

soundPlayerVC Настоящая почта modalViewController:

- (IBAction)emailStory:(id)sender {

if ([MFMailComposeViewController canSendMail]) {
    MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
    picker.mailComposeDelegate = self;
    Anecdote *anecdote = (Anecdote *)story;
    [picker setSubject:anecdote.name];
    [picker setMessageBody:[SearchHandler removeMarkupsFromPageText:anecdote.detail] isHTML:NO];
    [self.parentViewController presentViewController:picker animated:YES completion:nil];
}

    #pragma mark - mail compose delegates
-(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
    [controller dismissViewControllerAnimated:YES completion:nil];
}

но когда я нажимаю на backButton, popViewController не работает, потому что navigationController был очищен!!

КАК ЭТО ПРОИЗОШЛО? может кто-нибудь объяснить?

1 ответ

Я нашел решение: это было из-за того, что я не выполнил popViewController в правильном viewController.

pageContentVC это ребенок bookRootVC так bookRootVC отвечает за удаление pageContnetVC из стека навигации контроллера.

Я создал протокол и добавил свойство делегата pageContnetVC и назначен bookRootVC в качестве делегата pageContnetVC

protocol DismissViewControllerDelegate <NSObject>
- (void)popViewController;
@end

bookRootVC реализовать протокол:

#pragma mark pop view controller delegate
- (void)popViewController
{
    [self.navigationController popViewControllerAnimated:YES];
}

в viewDidLoad

 self.pageViewController.delegate = self;

и, наконец, кнопка назад в pageContentVC вызовите его делегат, чтобы удалить это представление из navigationController.

это все!