2017-02-02 2 views
1

Перед лицом стоящей перед проблемой вопроса Настоящий и Отклонить ViewController.Неожиданное поведение диспетчера отказов контроллера

Для например: -

Я в ViewController А затем я нажать на B

Так что в Навигационный контроллер стека мы имеем [A, B]

Теперь, если я представить любой контроллер представления на B (как MFMailComposeViewController)

Затем после отправки почты или удаления проекта его уволить MFMailComposeViewController и перенаправляет на вместо Б.

Я исследовал это, но не могу найти альтернативы.

+2

Вы можете показать метод 'doneFinishWithResult'' MFMailComposeViewControllerDelegate'? –

+1

Разделите код, как вы добавляете/удаляете (Push/Pop/Present/Dismiss) NavigationController, A, B и MFMailComposeViewController. –

ответ

0

Если вы вызвали метод Popviewcontroller в методе didFinishWithResult для MFMailComposeViewControllerDelegate в ViewControllerB, тогда это было бы возможно. вместо этого вы избегаете вызова метода PopViewController в вызове метода didFinishWithResult.

0

Надеюсь, это поможет. Используйте его при переключении между A -> B.

`` `пусть раскадровки = UIStoryboard (имя: "Main", расслоение: ноль)

desiredViewController = storyboard.instantiateViewController (withIdentifier: "desiredViewController")

UIApplication.shared.delegate? .window ??. RootViewController? = DesiredViewController `` `

0

попробовать это представленный MFMailComposeViewController от B

self.navigationController?.present(MFMailComposeViewController, animated: true, completion: nil) 

Вы могли бы использовать

self.present(MFMailComposeViewController, animated: true, completion: nil) 

Надеется, что это помогает

2

Привет Вы можете сделать это, как это, когда вы уволили после отправки почты или удаления проекта, отклоните MFMailComposeViewController, после чего вы можете проверить ViewController_Identifier, если это «A_Screen», тогда av вытащить его или убежать. Иначе, если это «B-Screen», тогда перейдите к этому контроллеру вида.

Используйте эту логику для навигации по своему желанию.

let targetView: String! = self.restorationIdentifier 
    if targetView == "A_Screen"{ 
       //Do nothing 
      } 
      else{ 
    let B_View = self.storyboard?.instantiateViewController(withIdentifier: "B_Screen") as! BViewController 

       self.navigationController?.pushViewController(B_View, animated: true) 
      } 

Убедитесь, что вы установили идентификатор ID для своих ViewControllers.

Надеюсь, это поможет вам.