Повторное представление модального представления приводит к последнему VC вместо первого

У меня есть контроллер навигации, который представлен модально с 4 представлениями в стеке. В финальном представлении есть кнопка «Готово», которая закрывает модальное представление. Когда я затем снова представляю модальное представление, оно автоматически переходит к этому последнему представлению вместо первого. Я добавил строку для всплывающего окна при первом просмотре после закрытия, но она добавляет странную анимацию независимо от того, установил ли я ее на ДА или НЕТ. Может я неправильно делаю?

- (void)dismissModalView
{
    [self dismissModalViewControllerAnimated:YES];
    [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:([self.navigationController.viewControllers count] -4)] animated:YES];
}

Обновлять:

Это метод, используемый для представления модального представления/контроллера навигации.

- (void)showModalView
{
    self.optionsNavController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self.navigationController presentModalViewController:self.optionsNavController animated:YES];
}

person Jon    schedule 12.09.2011    source источник


Ответы (3)


Нет, выглядит правильно. Если вы хотите сохранить состояние контроллера навигации, не представляйте его модально, так как он будет освобожден, когда вы закроете представление.

Модальные представления обычно используются для представления информации, которую нужно показать только кратко, без сохранения состояния представления (например, о странице, странице входа, странице настроек и т. д.).

person Enrico Susatyo    schedule 12.09.2011
comment
Я не хочу его сохранять. Я хочу выполнить сброс, когда он будет отклонен, поэтому, когда пользователь снова представит его, он будет на первом VC, а НЕ на том месте, где пользователь остановился в последний раз. - person Jon; 12.09.2011
comment
Я вижу, вы пытались удалить строку popToViewController? Я не думаю, что вам это нужно. В противном случае вы можете показать нам свою диаграмму иерархии представлений? - person Enrico Susatyo; 12.09.2011
comment
Да, если я удалю строку pop to VC, она просто загрузит последнее представление, в котором я был, когда закрыл navcontroller. - person Jon; 12.09.2011
comment
Кроме того, у меня есть метод, который вызывается в viewDidLoad для первого представленного модального VC. Однако это вызывается только в первый раз, когда я представляю модальное представление, этого не происходит, если я представляю его снова и т. д. Я думаю, что эта проблема связана. - person Jon; 12.09.2011

Извините, если я упрощаю вашу проблему, но если вам нужно вернуться прямо к первому контроллеру представления, возможно, вы могли бы попробовать метод popToRootViewControllerAnimated: вместо popToViewController:.

person Madhu    schedule 12.09.2011

Я не уверен, в чем проблема с опубликованным вами кодом отклонения, но должно работать следующее:

- (void)showModalView
{
    self.optionsNavController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self.optionsNavController popToRootViewControllerAnimated:NO];
    [self.navigationController presentModalViewController:self.optionsNavController animated:YES];
}

Кроме того, viewDidLoad предназначен для вызова только один раз при каждой загрузке представления, viewWillAppear a

person Sherman Lo    schedule 12.09.2011