Попытка представить «ChatController» на «RoomViewController», который уже представляет «подтверждающего пользователя»

#ios #swift #xcode #uiviewcontroller #modal-dialog

Вопрос:

Я пытаюсь представить ChatController после увольнения пользователя подтверждения, но я получаю это предупреждение:

Попытайтесь представить ChatController на RoomViewController (от RoomViewController), который уже представляет подтверждающего пользователя.

Это мой код:

 confirmPopup.dismiss(animated: false, completion: { [self] in
    dialogIsShowing = false
            
    let story = UIStoryboard(name: "Chat", bundle: nil)
    let chat = story.instantiateViewController(withIdentifier: "chat_controller") as? ChatController
    chat?.roomCreator = byUser
            
    controller!.present(chat!, animated: true, completion: nil)
})
 

Комментарии:

1. Если animated true да , то работает ли это? Мне интересно, так как иногда, когда анимация установлена в значение true/false в другом методе, поведение может отличаться…

2. Вы, вероятно, перепутали свои контроллеры представлений: что такое controller ? Вы звоните dismiss confirmPopup , затем звоните controller.present — представляет ли confirmPopup что-нибудь? Должен ли он отклонить представленный контроллер представления controller как странный побочный эффект?

3. @Larme animate = true не работает

4. @CouchDeveloper controller -это родительский ViewController, который представляет confirmPopup , и я хочу представить chat на том же ViewController, confirmPopup что и после его создания

5. Если VC A представляет VC B, а VC B представляет VC C (A -> B ->> C), и вы вызываете B. отклонить, он отклоняет C (только). Если вы вызываете A. отклонить, он отклоняет B и C, одновременно анимируя C. Если вы вызовете C. отклонить, он внутренне вызовет B. отклонить.

Ответ №1:

Вы представляете контроллер чата до того, как запрос на подтверждение будет отклонен. Завершение, которое принимает метод увольнения, вызывается до завершения операции увольнения, я думаю. Ты должен сделать это вот так:

 confirmPopup.dismiss(animated: false, completion: nil)

dialogIsShowing = false            
let story = UIStoryboard(name: "Chat", bundle: nil)
let chat = story.instantiateViewController(withIdentifier: "chat_controller") as? ChatController
chat?.roomCreator = byUser
            
controller!.present(chat!, animated: true, completion: nil)
 

Комментарии:

1. Код выполнен в процессе завершения, поэтому он должен быть завершен, см. developer.apple.com/documentation/uikit/uiviewcontroller/…

2. Спасибо @Larme. Это все еще дает то же самое предупреждение Бесарту ?

3. @Амаис Шейх да все то же предупреждение

4. @Besart перекрестно проверяет, представляет ли контроллер что-то или нет, в то время, когда вы вызываете present для ChatController.