iOS アプリケーションの任意のポイントからビューを「ポップ」することは可能ですか?
たとえば、イベントでビューのスライド イン (モーダル) をトリガーする必要があり、イベントはアプリケーションの任意の画面でいつでも発生する可能性があります。
また、これを他のプロジェクトに含めることができるものにしたいと考えており、これらのプロジェクトに特別なことをする必要がないことを望んでいます (参照されたプロジェクトでの配線以外)。
この場合は、appdelegate を使用する方が適切ですが、使用しているアプリケーションの種類によって異なります。
任意のView Controllerから呼び出すことができるappdelegateのメソッドを作成します
- (void)myMethod {
MyController *myController = [[MyController alloc] init];
[self.window.rootViewController presentModalViewController:myController animated:YES];
}
このコントローラーを閉じるには、ビューコントローラー自体でアクションを作成する必要があります。
注:一度に 1 つの modelviewcontroller しか持つことができないため、すべてのビューをスタックするために、modelviewcontroller がナビゲーション コントローラーであることを確認してください。
このようなもの、
- (void)myMethod {
MyController *myController = [[MyController alloc] init];
if([self.window.rootViewController modalViewController]) {
[(UINavigationController *)self.window.rootViewController.modalViewController pushViewController:myController animated:YES];
} else {
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:myController];
[self.window.rootViewController presentModalViewController:navController animated:YES];
}
}
この問題に対処するために、この小さな再帰メソッドを作成しました: https://gist.github.com/MartinMoizard/6537467
これは UIViewController のカテゴリです。基本的に window.rootViewController から呼び出すことができます。
モーダルを (おそらくボタンで) 閉じるようにしたい場合は、次のように呼び出します。
[self dismissViewControllerAnimated:YES completion:NULL];
これにより、それを表示したView Controllerに自動的に転送され、モーダルView Controllerが閉じられます。