2

ビューコントローラを再起動したい。

私が行ったことは、現在のView Controllerをナビゲーションスタックからポップし、ViewControllerの新しいインスタンスをスタックにプッシュすることです。ただし、これは機能しません。現在のViewControllerはナビゲーションスタックからポップされますが、新しいインスタンスはスタックにプッシュされません。

これが私のコードスニペットです:

[[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

4 に答える 4

3

コードに基づいて、現在のView Controllerをポップし、すぐに再プッシュしようとしているように見えます。両方向にアニメーションが表示されます。なぜこれをやりたいのか想像できませんが、とりあえずそれを脇に置いて、これを機能させる方法を説明します。

まず、<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];
}
于 2011-07-15T10:13:01.990 に答える
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];
于 2011-07-15T09:55:11.180 に答える
0

私はあなたが呼び出しの間にいくつかの時間間隔を与える必要があると思います。uはアニメーションでこれを行っているため、最初の呼び出し自体を完了するには時間がかかります。

だから最初に試してみてください、[[self navigationController] popViewControllerAnimated:NO];

于 2011-07-15T09:48:14.873 に答える
0

あなたがについて尋ねているならVideoPlayerViewController

[[self navigationController] popViewControllerAnimated:YES];

前のViewControllerに移動します。そのため、現在のViewControllerのコードが実行されない場合があります。の新しいインスタンスはVideoPlayerViewController、前のViewControllerでインスタンス化する必要があります。

于 2011-07-15T09:49:58.713 に答える