dismissViewControllerAnimated вызывается, но ViewController не удаляется - PullRequest
43 голосов
/ 24 января 2012

У меня проблемы с методом dismissViewControllerAnimated, не закрывающим представление.

То, что происходит в приложении, это:

  • Ячейка в ItemViewController выбрана.
  • Представление push ed ItemDetailViewController, и детали передаются через делегата
  • Пользователь выбирает «Готово», и событие отправляется через делегата для закрытия в ItemViewController

Все это работает, за исключением View, не закрывается, ошибок нет. Кто-нибудь может увидеть, что не так?

- (void)itemDetailViewControllerDidFinish:(ItemDetailViewController *)controller
{
    NSLog(@"Controller: %@", controller);
    // Returns - Controller: <ItemDetailViewController: 0x6b68b60>

    [self dismissViewControllerAnimated:YES completion:nil];
}

Ответы [ 5 ]

66 голосов
/ 24 января 2012

Что, если вы позвоните [controller.navigationController popViewControllerAnimated:YES] вместо этого?

В этом отношении, что если вы позвоните [controller dismissViewControllerAnimated:YES completion:nil] вместо того, чтобы вызывать его самостоятельно?

10 голосов
/ 31 января 2013

Ответ на этой странице: dismissviewcontrolleranimated-vs-popviewcontrolleranimated

dismissViewController используется, когда у вас нет навигационного контроллера.Скорее всего, вы используете навигационный контроллер, а вместо этого используйте self.navigationController popViewController.

Также обратите внимание на его замечание lemax: используйте NULL, а не nill для обработчика завершения

4 голосов
/ 25 марта 2016

Возникла проблема, когда при вызове dismissViewControllerAnimated была отклонена клавиатура в UIViewController, но не само представление.

Решено с помощью двух вызовов:

[self dismissViewControllerAnimated:NO completion:nil];
[self dismissViewControllerAnimated:YES completion:nil];

мгновенного вызова дляклавиатура, затем анимированная для контроллера

4 голосов
/ 01 октября 2013

У меня была проблема в iOS5, где стандартный обратный вызов завершения не позволял полностью закрыть представление (только текущее нажатие этого модального окна)

[controller dismissViewControllerAnimated:YES completion:^ {
     //
 }];

Решение для iOS5 заключается в отсутствии обратного вызова:

[controller dismissViewControllerAnimated:YES completion:nil];
0 голосов
/ 29 марта 2017

Ваша ситуация - ItemViewController -> ItemDetailViewController (выдвигается на navigationController) Self.dismissViewController (..) отклоняет контроллер представления, представленный поверх себя (в случае, если это ItemViewController).Здесь вы не представили никакого VC поверх себя, вместо этого вы выдвинули новый VC поверх стека навигации.Таким образом, правильный способ отклонить ItemDetailViewController будет

self.navigationController.popViewController (true).пожалуйста, прочтите описание dismissViewController (....), чтобы получить больше ясности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...