#ios #objective-c #uipageviewcontroller #uialertcontroller
#iOS #objective-c #uipageviewcontroller #uialertcontroller
Вопрос:
У меня есть структура VC, подобная этой
UIPageViewController -> DetailViewController -> popoverviewcontroller
popoverviewcontroller отключается с помощью unwind segue, возвращая нас к detailviewcontroller
Теперь, после завершения удаления всплывающего окна, я хотел бы обновить страницы в pagecontroller, поскольку действие, выполняемое пользователем, изменило данные.
Я также хотел бы отобразить оповещение, уведомляющее пользователя о том, были ли они успешными.
Итак, я попытался поместить этот код в pageViewController
- (IBAction) unwindFromPopup:(UIStoryboardSegue*)unwindSegue{
[self refreshPages];
UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"alert" message:@"this should appear" preferredStyle:UIAlertControllerStyleAlert];
[self presentViewController:alertController animated:YES completion:nil];
}
Вместо этого я попытался переместить приведенный выше код в контроллер подробного просмотра, но я не получаю от этого никакого результата. Никакой ошибки или чего-либо еще, просто полное отсутствие оповещения. Я ставлю точку останова в переходе, и вызывается код. Но предупреждения нет.
Я думал поместить код в один из соответствующих методов viewDidAppear, но по какой-то причине viewDidAppear не вызывается ни для pageviewcontroller, ни для контроллера detailview после того, как я закрываю всплывающее окно.
Итак, на данный момент я понятия не имею, как заставить это предупреждение появиться.
Нужно ли мне публиковать мой полный код, или моя проблема очевидна из-за деталей, которые я включил?
Комментарии:
1. Всплывающее окно должно вызвать его
beingDismissed
метод, когда это будет сделано, но я думаю, вам следует рассмотреть возможность использования контроллера представления detail (или page, не совсем понятно) vc, установитьpresentationController.delegate
self
и реализовать методы делегирования, чтобы делать то, что вы хотите здесь.2. Это очень сложно, и последовательность событий отличается, если вы переходите, представляете, всплываете или показываете. Вы также можете посмотреть viewDidDisappear всплывающего окна, но затем вам также нужно проверить, если
isMovingFromParentViewController
ДА, иначе это может быть потому, что на экране появилось что-то еще.3. Не могли бы вы указать объяснение beingDismissed в качестве ответа? Я приму это
Ответ №1:
Спасибо — на основе вашего комментария… давным-давно в отдаленной версии iOS я выполнил все возможные переходы и отметил, что когда вызывается, и у меня есть таблица, на которой я основал свой ответ. Должен признать, в настоящее время я больше всего использую делегат контроллера представления.
В любом случае, чтобы ответить на ваш вопрос, когда вы открываете или модально представляете контроллер, представленный контроллер сообщит beingPresented
и beingDismissed
когда это будет сделано, и вы сможете использовать это для того, что вы пытаетесь сделать.
Когда вы нажимаете контроллер, он выводит сообщение isMovingToParentViewController
при отображении и isMovingFromParentViewController
при отклонении, снова в представленном контроллере.
Вернемся к всплывающему окну… это будет сообщение prepareForSegue
в представленном VC и viewWillAppear
и viewDidAppear
в представленном VC и, при отклонении, будет сообщение только viewWillDisappear
и viewDidDisappear
в представленном VC, таким образом, ваша проблема. По крайней мере, это также будет сообщение beingDismissed
, как упоминалось, и если вы можете использовать это, я действительно рад за вас.
Комментарии:
1. Я смог передать обратный вызов из pagecontroller во всплывающее окно и вызвать его в beingDismissed. Это позволило мне запустить нужный код внутри PageController. Оповещение работает!