iOS4 как перезапустить просмотр контроллера - PullRequest
2 голосов
/ 15 июля 2011

Я хочу перезапустить контроллер представления.

То, что я сделал, это вытащил текущий контроллер представления из стека навигации и поместил новый экземпляр контроллера представления в стек. Однако это не работает. Текущий контроллер представления выталкивается из стека навигации, но новый экземпляр не помещается в стек.

Вот мой фрагмент кода:

[[self navigationController] popViewControllerAnimated:YES];

VideoPlayerViewController *videoPlayer = [[VideoPlayerViewController alloc] init];
[videoPlayer setMedia:media];

[[self navigationController] pushViewController:videoPlayer animated:YES];
[videoPlayer release];
videoPlayer = nil;

NSLog(@"Restarting view controller...");

Есть идеи, что может быть не так?

Ответы [ 4 ]

3 голосов
/ 15 июля 2011

Судя по вашему коду, похоже, что вы пытаетесь открыть текущий контроллер вида, а затем сразу же снова его нажать, с анимацией в обоих направлениях. Я не могу себе представить, почему вы хотите это сделать, но, отложив это на мгновение, вот как вы можете заставить это работать.

Сначала добавьте <UINavigationControllerDelegate> к объявлению @interface. Тогда:

- (void)repushViewController {
    self.navigationController.delegate = self;
    [[self navigationController] popViewControllerAnimated:YES];
}

- (void)navigationController:(UINavigationController *)navController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    navController.delegate = nil;
    VideoPlayerViewController *videoPlayer = [[VideoPlayerViewController alloc] init];
    [videoPlayer setMedia:media];

    [navController pushViewController:videoPlayer animated:YES];

    [videoPlayer release];
}
0 голосов
/ 15 июля 2011

Если вы спрашиваете о VideoPlayerViewController,

[[self navigationController] popViewControllerAnimated:YES];

идет к предыдущему виду контроллера. Поэтому код в текущем контроллере представления может не выполняться. Новый экземпляр VideoPlayerViewController должен быть создан в предыдущем контроллере представления.

0 голосов
/ 15 июля 2011

Является ли контроллер представления «вытолкнутым» вверху стека?Если так, я мог бы предложить изменить дизайн - я бы использовал этот метод UINavigationController:

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated

, чтобы поменять местами контроллеры представления, и с анимацией, если вам все еще требуется.

VideoPlayerViewController *videoPlayer = [[VideoPlayerViewController alloc] init];

[videoPlayer setMedia:media];

[[self navigationController] setViewControllers:[NSArray arrayWithObject:videoPlayer]
                                      animation:YES];

[videoPlayer release];
0 голосов
/ 15 июля 2011

Полагаю, вам нужно указать интервал между вызовами.Поскольку вы делаете это с анимацией, потребуется некоторое время, чтобы завершить сам первый вызов.

Итак, сначала попробуйте, [[self navigationController] popViewControllerAnimated:NO];.

...