iOS4如何重启视图控制器

时间:2011-07-15 09:40:43

标签: iphone ios ios4 uiviewcontroller navigationcontroller

我希望重新启动视图控制器。

我所做的是将当前视图控制器从导航堆栈中弹出,并将视图控制器的新实例推送到堆栈上。 但是,这不起作用。当前视图控制器从导航堆栈中弹出,但新实例未被压入堆栈。

这是我的代码段:

[[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 个答案:

答案 0 :(得分:3)

根据您的代码,看起来您正在尝试弹出当前视图控制器,然后立即重新推送它,并在两个方向上都有动画。我无法想象你为什么要这样做,但暂时把它放在一边,这就是你如何让它发挥作用。

首先,将<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];
}

答案 1 :(得分:0)

我想你需要在通话之间给出一些时间间隔。由于你是用动画做的,所以需要一些时间才能完成第一次调用。

首先尝试[[self navigationController] popViewControllerAnimated:NO];

答案 2 :(得分:0)

如果您询问VideoPlayerViewController

[[self navigationController] popViewControllerAnimated:YES];

转到上一个视图控制器。因此,可能无法执行当前视图控制器中的代码。 VideoPlayerViewController的新实例应该在前一个视图控制器中实例化。

答案 3 :(得分:0)

是或者是,视图控制器被“弹出”在堆栈的顶部?如果是这样,我可能会建议更改设计 - 我会使用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];