5

2 つのモーダル ビュー コントローラーを閉じる必要があります。2 つ以上のビュー コントローラーをポップする方法を知っています。

        UINavigationController* navController = self.navigationController;
    NSArray *array=[navController viewControllers];
    UIViewController* controller = [navController.viewControllers objectAtIndex:0];
    [navController popToViiewController:controller animated:YES];

これは、最初のビューに戻る方法ですが、2 つ以上の却下モーダル ビューがある場合、どのように戻ることができますか?

助けてください、ありがとう、マダン・モハン

4

5 に答える 5

5

のドキュメントから-[UIViewController dismissModalViewController]

複数のモーダルビューコントローラーを連続して提示し、モーダルビューコントローラーのスタックを構築する場合、スタックの下位のビューコントローラーでこのメソッドを呼び出すと、その直接の子ビューコントローラーとスタック上のその子の上のすべてのビューコントローラーが閉じられます。これが発生すると、最上部のビューのみがアニメーション化されて閉じられます。中間のViewControllerは、スタックから削除されるだけです。最上位のビューは、モーダル遷移スタイルを使用して閉じられます。これは、スタックの下位にある他のビューコントローラーで使用されるスタイルとは異なる場合があります。

于 2010-11-29T15:03:32.083 に答える
4

以下のコードを使用してください

[[[self presentingViewController] presentingViewController]  dismissModalViewControllerAnimated:YES];
于 2012-10-18T10:21:46.390 に答える
3

次のユーティリティ静的メソッドを使用して、モーダルのスタックの popToRootViewController をシミュレートします。

// Util.m
+ (void)popModalsToRootFrom:(UIViewController*)aVc {
    if(aVc.parentViewController == nil) {
        return;
    }
    else {
        [Util popModalsToRootFrom:aVc.parentViewController];  // recursive call to this method
        [aVc.parentViewController dismissModalViewControllerAnimated:NO];
    }
}

次のように使用します。

[Util popModalsToRootFrom:aViewController];

より高度なものが必要な場合は、次のようにすることができます。

+ (void)popModalsFrom:(UIViewController*)aVc popCount:(int)count {
    if(aVc.parentViewController == nil || count == 0) {
        return;
    }
    else {
        [Util popModalsFrom:aVc.parentViewController popCount:count-1];  // recursive call to this method
        [aVc.parentViewController dismissModalViewControllerAnimated:NO];
    }
}

次に、ポップするモーダルの数を渡すか、-1 だけを渡してルートまでポップします。

于 2011-06-01T18:54:09.270 に答える
2
UINavigationController* navController = self.navigationController;
NSArray *viewControllers=[navController viewControllers];
UIViewController* controller = [viewControllers objectAtIndex:0];
[navController popToViewController:controller animated:YES];

上記のコードでオブジェクトをインデックス 0 に設定すると、プッシュ ビュー コントローラーである最初のビューに移動します。

1)Rootview--->moodalview1--->moodalview2--->moodalview3 上記のコードを使用すると、ルート ビューになります。

2)Rootview--->Pushview1---->moodalview1--->moodalview2----->moodalview3. 上記のコードを使用すると、PushView になります。

于 2010-12-01T07:44:16.847 に答える
1

の場合、 == (ビューは順番に非表示になります) およびブロックiOS 5のサポート:animationYEScompletion

+ (void)dismissAllVCsForVC:(UIViewController *)VC animated:(BOOL)animated completion:(BPSimpleBlock)completion {
    if (VC.presentedViewController == nil) {
        if (completion) {
            completion();
        }
    } else {
        [BaseViewController dismissAllVCsForVC:VC.presentedViewController
                                        animated:animated
                                      completion:
         ^{
             [VC dismissViewControllerAnimated:animated completion:completion];
         }];
     }
}
于 2012-09-16T23:45:00.787 に答える