web-dev-qa-db-ja.com

UIStoryboard:アクティブなストーリーボードを取得する正しい方法は何ですか?

私は現在、すべてのドキュメントを猛烈に掘り下げていますが、探しているものがまだ見つかりません。私はそれが本物だと思う!回答。

メインバンドルでアクティブなストーリーボードを見つける必要があり、これを行うための最良の方法を知りたいだけです。

これは、[UIStoryboard storyboardWithName:@"XXX" bundle:mainBundle]を使用して実行中のストーリーボードを抽出できるようにするためです。

私はイディオムをオンにすることでそれを手直しする方法を知っていますが、これは...手間だと感じています。

これを行う正しい方法は何ですか?

UPDATE:

OK。見つけた。

いつものように、 スタックオーバーフロー (公式のAppleドキュメントサイト;)。

私が決めたコードは次のとおりです。

UIStoryboard *st = [UIStoryboard storyboardWithName:[[NSBundle mainBundle].infoDictionary objectForKey:@"UIMainStoryboardFile"] bundle:[NSBundle mainBundle]];
50
Chris Marshall

OK。上記の私のコメントが示すように、私は(不適切なフレーズの質問)に対する答えを見つけました。

私はそうではないので、main(notactive)ストーリーボードを取得したかった化身ごとに複数のストーリーボードを使用します。私は、iPhone用に1つのストーリーボード、iPad用に1つの標準モデルを使用しています。ストーリーボードを取得する最もクリーンな方法が欲しかったので、それを使用してView Controllerを生成できました。

Stack Overflowのこの投稿 で答えを見つけ、次のコードで実装しました。

UIStoryboard *st = [UIStoryboard storyboardWithName:[[NSBundle mainBundle].infoDictionary objectForKey:@"UIMainStoryboardFile"] bundle:[NSBundle mainBundle]];
26
Chris Marshall

ViewControllerのアクティブなストーリーボードを取得したい場合、ストーリーボードプロパティがあります。これは、新しいインスタンスを作成する代わりに、私がそれを解決した方法です:

LoginViewController *vc = [navController.storyboard instantiateViewControllerWithIdentifier:@"firstLaunch"];
[navController presentModalViewController:vc animated:YES];

In Swift呼び出します:

let loginViewController = navigationController?.storyboard?.instantiateViewController(withIdentifier: "firstLaunch") as! LoginViewController
navigationController?.present(loginViewController, animated: true, completion: nil)

また、ナビゲーションコントローラーとストーリーボードに対してガードを使用することで、はるかに安全になります。 LoginControllerを取得することを保証するために、as!を使用しました。

39
olivaresF

Swiftでは、次の構文を使用します。

let storyboard = UIStoryboard(name: "Main", bundle: nil) 

nilbundleに渡すと、呼び出しがmainバンドルを自動的に参照することに注意してください。

ストーリーボードにあるView Controllerで、そこからストーリーボードを直接インスタンス化する場合は、次のようにします。

let storyboard: UIStoryboard? = self.storyboard // call this inside a VC that is on the Storyboard

最後のケースでは、self.storyboardは、optionalStoryboard(Storyboard?)、それを使用したい場合は、次のように展開します。

if let storyboard = self.storyboard {
  // access storyboard here
}
6
nburk

更新された質問の上のコードフォームをコピーして貼り付けたので、全員が答えとして見ることができます。

UIStoryboard *st = [UIStoryboard storyboardWithName:[[NSBundle mainBundle].infoDictionary objectForKey:@"UIMainStoryboardFile"] bundle:[NSBundle mainBundle]];
1
Imran Khan