2012-01-24 3 views
43

У меня возникли проблемы с методом dismissViewControllerAnimated, который не закрывает представление.Вызывается вызовПросмотр ControlAnimated, но ViewController не отклоняется

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

  • клеток в ItemViewController.
  • Посмотреть это толчок ред к ItemDetailViewController и детали направляются через делегата
  • Пользователь выбирает «сделано» и событие отправляется через делегат должен быть закрыт в ItemViewController

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

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

    [self dismissViewControllerAnimated:YES completion:nil]; 
} 
+0

что делать, если вы отправите 'rejectModalViewControllerAnimated:' вместо этого? –

+0

Как «self» нажата на экран? – Nekto

+0

@Vince: Я попытался, но он не работает, если segue - это «толчок». –

ответ

65

Что делать, если вы звоните в [controller.navigationController popViewControllerAnimated:YES]?

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

+4

+1 - 'push', поэтому' pop' –

+1

Спасибо, это сработало! Очень признателен. –

+8

Точный синтаксис, который работал для меня: [self.navigationController popViewControllerAnimated: YES]; – Dan

10

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

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

Кроме того, принять к сведению Лемакс его замечание: использование NULL не Нилл для completionhandler

+0

спасибо, это похоже на то, что моя проблема была – John

+2

Используйте NULL для указателей без объектов. Поэтому здесь вы не должны использовать NULL. –

+2

MacTypes.h имеет #define nil NULL ... –

4

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

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

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

[controller dismissViewControllerAnimated:YES completion:nil]; 
3

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

решаемые его с помощью двух вызовов:

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

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

+0

Удивительный, попробовал все до этого! –

0

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

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

Смежные вопросы