it-swarm.com.ru

dismissViewControllerAnimated вызывается, но ViewController не удаляется

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

Что происходит в приложении здесь:

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

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

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

    [self dismissViewControllerAnimated:YES completion:nil];
}
43
Ad Taylor

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

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

66
Nick Lockwood

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

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

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

10
Leander

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

Решил это с помощью двух вызовов:

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

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

4
Cbas

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

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

Решение для iOS5 это не иметь обратного вызова:

[controller dismissViewControllerAnimated:YES completion:nil];
4
Danoli3

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

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

0
Arya