web-dev-qa-db-ja.com

別の絵コンテに移行しますか?

あるストーリーボードから別のストーリーボードに分離すること、またはストーリーボードを別のストーリーボードのView Controllerに埋め込むことは可能ですか? UITabBarControllerUINavigationControllerを配置する必要がありますが、ニースと分離した状態に保ちたいと思います。

131
Ry-

はい。ただし、プログラムで行う必要があります。

// Get the storyboard named secondStoryBoard from the main bundle:
UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];

// Load the initial view controller from the storyboard.
// Set this by selecting 'Is Initial View Controller' on the appropriate view controller in the storyboard.
UIViewController *theInitialViewController = [secondStoryBoard instantiateInitialViewController];
//
// **OR**  
//
// Load the view controller with the identifier string myTabBar
// Change UIViewController to the appropriate class
UIViewController *theTabBar = (UIViewController *)[secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];

// Then Push the new view controller in the usual way:
[self.navigationController pushViewController:theTabBar animated:YES];
200
lnafziger

Xcode 7以降では、ストーリーボードリファレンスを使用してこれをグラフィカルに行うことができます。

reference

ストーリーボードリファレンスをストーリーボードに追加します。 ViewControllerとStoryboard Referenceの間にセグエを作成(Ctrl +ドラッグ)

次に、このフィールドに入力します。

enter image description here

「Tutorial」は「Tutorial.storyboard」ファイルであり、「MainTutorialController」はViewControllerSettingsの「Storyboard ID」フィールドです

115
milczi

UIStoryboardSegueは抽象クラスであるため、実際に手動でセグエを実行することはできません。それをサブクラス化し、performを実装して、何でもできるようにする必要があります。本当にストーリーボードで作成することを意図しています。ただし、View Controllerを手動でプッシュすることはできますが、これは良い解決策です。 lnafzigerの答えはこれをうまくやっています:

UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];
UIViewController *theTabBar = [secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];
[self.navigationController pushViewController:theTabBar animated:YES];

ただし、注意すべきことの1つは、物事を素敵で分離したいということです。ストーリーボードのアイデアは、すべてのデザイン作業を1か所で行いながら、物事を分離できるようにすることです。各View Controllerはニースであり、ストーリーボード内で他のコントローラーと分離されています。全体のアイデアは、すべてを1か所に保管することです。整理しやすいようにうまくレイアウトすれば、準備完了です。本当に正当な理由がない限り、分離しないでください。

10
wbyoung

UITabBarControllersをUINavigationControllerに配置しないでください。 Apple サポートしない このような封じ込めとして、不正な自動回転/ビューのアンロードなどのバグを求めています。

ただし、View Controllerを組み合わせる場合、格納の順序が重要です。特定の取り決めのみが有効です。子から親への封じ込めの順序は次のとおりです。

  • コンテンツビューコントローラー、および柔軟な境界を持つコンテナービューコントローラー(ページビューコントローラーなど)
  • Navigation View Controller
  • Tab Bar Controller
  • Split View Controller
7
Danra

Swiftバージョンは次のとおりです。

let targetStoryboardName = "Main"
let targetStoryboard = UIStoryboard(name: targetStoryboardName, bundle: nil)
if let targetViewController = targetStoryboard.instantiateInitialViewController() {
    self.navigationController?.pushViewController(targetViewController, animated: true)
}
4
DudeOnRock