0

NavigationControllerの設定方法を理解しようとしています。このコードがpushViewControllerとpresentModalViewControllerの両方で機能する理由がわかりません。私はそれがどちらかでなければならないと思った。

コンテキストでは、これはUIImagePickerControllerを作成するUIViewControllerです。後に2つのビューコントローラーがあります。最初の(EditPictureViewController)は画像自体を編集し、2番目のビューコントローラーはプロパティを編集します。presentModalViewControllerを使用する必要があると思います。

...また、Modal View Controllerを閉じないようにして、EditPictureViewControllerで写真の再撮影ボタンを使用できるようにする方法はありますか?

ありがとう。

- (void)viewDidLoad {

    [super viewDidLoad];
    self.navController = [[UINavigationController alloc] init]; }

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    [self dismissModalViewControllerAnimated:NO];
    EditPictureViewController *viewController = [[EditPictureViewController alloc] initWithImage:image];
    [viewController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
    [self.navController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
    [self.navController pushViewController:viewController animated:NO];
    [self presentModalViewController:self.navController animated:YES]; }
4

2 に答える 2

0

これにより、EditPictureViewControllerがNavigationControllerのビュースタックにプッシュされます。

[self.navController pushViewController:viewController animated:NO];

次に、NavigationControllerをここに表示します。

[self presentModalViewController:self.navController animated:YES];

つまり、あなたがしているのは、ビューコントローラからのモーダルビューを提示することだけであり、そのモーダルはたまたまNavigationControllerです。

于 2013-02-13T17:55:33.027 に答える
0

設定は「通常の方法ではありません。標準的なパラダイムは、didFinishPickingMediaWithInfo:メソッドでナビゲーションコントローラーを作成し、ルートビューコントローラーをプッシュするのではなくviewControllerに設定することです。通常は「プッシュ」と考えます。次のコントローラーに移動するのと同じように、実際にはルートビューコントローラーを非標準の方法で設定するだけです。また、モーダルビューコントローラーを表示および非表示にするための現在の方法を使用する必要があります。使用量は減価償却されます。これらの遷移スタイルの両方を設定する必要があるかどうかはわかりません。一方をコメントアウトして、それでも機能するかどうかを確認してください。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    [self dismissViewControllerAnimated:NO completion:nil];
    EditPictureViewController *viewController = [[EditPictureViewController alloc] initWithImage:image];
    self.navController = [[UINavigationController alloc] initWithRootViewController:viewController];
    [viewController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
    [self.navController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
    [self presentViewController:self.navController animated:YES completion:nil]; 

}

于 2013-02-13T18:43:41.290 に答える