View Controller не будет отклонен и немедленно представит новый контроллер представления

Я пытаюсь представить контроллер представления после того, как считыватель QRCode был закрыт, однако при этом снова отображается контроллер представления считывателя QRCode. Фрагмент кода ниже показывает метод и то, как я отклоняю представление и как я пытаюсь представить следующий контроллер представления. Любая идея о том, почему контроллер представления QR-ридера продолжает представлять себя, когда я пытаюсь представить другой контроллер.

func readerDidCancel(_ reader: QRCodeReaderViewController) {
    dismiss(animated: true, completion: nil)
    present(ClockInOrOutViewController(), animated: true, completion: nil)
}

2 ответа

Решение

Вы должны позвонить present внутри обработчика завершения dismiss,

func readerDidCancel(_ reader: QRCodeReaderViewController) {

    weak var presentingViewController = self.presentingViewController

    self.dismiss(animated: true, completion: {
        presentingViewController?.present(ClockInOrOutViewController(), animated: true, completion: nil)
    })
}

Если это не работает, это означает, что ваш контроллер представления также был каким-то образом удален. (Уволенный / совали?)

Вы не можете представить контроллер представления, в то время как другой контроллер представления отклоняет, а также присутствует при отклонении контроллера представления. Вы можете сделать что-то вроде этого:

func readerDidCancel(_ reader: QRCodeReaderViewController) {
   let presenting = self.presentingViewController
   dismiss(animated: true, completion: {
      presenting?.present(ClockInOrOutViewController(), animated: true, completion: nil)
   }) 
}
Другие вопросы по тегам