0

modalViewControllerの却下に関してiOS6で問題に直面しています

これが私が共有しているコードスニペットです:

   UIViewController *controller=appdelegate.navigationController.topViewController;

   if(kDeviceVersion>=5.0){

     if(controller.parentViewController){

        if(controller.parentViewController.parentViewController){

            [controller.parentViewController.parentViewController dismissViewControllerAnimated:NO completion:nil];

        }

        [controller.parentViewController dismissViewControllerAnimated:NO completion:nil];

    }

}
else{

    if(controller.parentViewController){

        if(controller.parentViewController.parentViewController){

            [controller.parentViewController.parentViewController dismissModalViewControllerAnimated:NO];

        }

        [controller.parentViewController dismissModalViewControllerAnimated:NO];

    }

}

このコードは、ios4.0からios5.1.1で正常に機能しています。しかし、ios6では動作しませんでした。私が却下したいモーダルビューコントローラーは却下されていません。代わりに、このエラーが表示されます。

ビューが現在表示されていないモーダルビューコントローラを閉じようとします。self = UINavigationController:0xa947440 modalViewController = UINavigationController:0x8c36170

しかし、presentModalViewControllerを使用してそのビューコントローラーを提示しようとすると、次のように表示されます。

警告:すでにUINavigationController:0x8c36170を表示しているUINavigationController:0xa947440に表示しようとしました

iOS6でこの問題を解決する方法と修正方法を教えてください。

4

2 に答える 2

1

どのVCがあなたが却下したいVCを提示するかはあなたの質問からは明らかではありません。ただし、常に次のルールに従うことをお勧めします。

それを提示したVCからも却下します。したがって、たとえば、VC0がVC1を提示する場合、VC0内からVC1も却下します。これは、他のUIViewControllerを開いたり閉じたりする非常に関連する質問への回答の1つからわかるように、実際にはAppleが推奨する方法でもあります-プロトコルとデリゲートを使用する以外のアプローチはありますか?

于 2012-09-29T06:53:05.787 に答える
0

モーダルビューコントローラーを使用する代わりに、ナビゲーションコントローラーを使用し、現在のモーダルビューコントローラーの代わりにCAAnimationを使用してプッシュビューを使用しました

それはこれの代わりです-----

    ShareViewController *share=[[ShareViewController alloc] initWithNibName:@"ShareViewController" bundle:nil];
    UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController:share];
    share.modalPresentationStyle=UIModalPresentationFormSheet;
    share.modalTransitionStyle=UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:nav animated:YES];

    [share release];
    [nav release];

これを使用できます

    ShareViewController *share=[[ShareViewController alloc] initWithNibName:@"ShareViewController" bundle:nil];

    CATransition* transition = [CATransition animation];
    transition.duration = 0.4;
    transition.type = kCATransitionFade;
    transition.subtype = kCATransitionFromTop;

    [self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
    [self.navigationController pushViewController:share animated:NO];

    [share release];
于 2012-11-29T10:26:28.907 に答える