#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.