2つ以上のDismisSmodalviewControllerを却下する方法は?
-
28-09-2019 - |
質問
2つのモーダルビューコントローラーを却下する必要があります。2つ以上のビューコントローラーをポップする方法を知っています
UINavigationController* navController = self.navigationController;
NSArray *array=[navController viewControllers];
UIViewController* controller = [navController.viewControllers objectAtIndex:0];
[navController popToViiewController:controller animated:YES];
これは私が最初のビューに戻る方法ですが、モーダルビューを2つ以上却下する場合、どのようにバックバックすることができますか
マダン・モハン、ありがとう、私を助けてください
解決 4
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になります。
他のヒント
のドキュメントから -[UIViewController dismissModalViewController]
:
いくつかのモーダルビューコントローラーを連続して提示し、モーダルビューコントローラーのスタックを構築する場合、スタックの低いビューコントローラーでこのメソッドを呼び出すと、その即時の子ビューコントローラーとスタック上の子供の上のすべてのビューコントローラーが却下されます。これが起こると、最上位のビューのみがアニメーション化された方法で却下されます。中間ビューコントローラーは、スタックから単純に削除されます。最上位ビューは、モーダルトランジションスタイルを使用して却下されます。これは、スタックの低い他のビューコントローラーが使用するスタイルとは異なる場合があります。
以下のコードを使用してください
[[[self presentingViewController] presentingViewController] dismissModalViewControllerAnimated:YES];
次のユーティリティ静的方法を使用して、モーダルのスタックについて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だけでルートまでポップします。
にとって iOS 5
, 、のサポート animation
==YES
(ビューは順番に隠されます)と completion
ブロック:
+ (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];
}];
}
}