ストーリーボードを別のストーリーボードに分割したり、ストーリーボードを別のストーリーボードのビューコントローラーに埋め込んだりすることはできますか?私は配置する必要があるUITabBarController
中でUINavigationController
、私はそれら素敵を維持し、分離したいと思います。
ストーリーボードを別のストーリーボードに分割したり、ストーリーボードを別のストーリーボードのビューコントローラーに埋め込んだりすることはできますか?私は配置する必要があるUITabBarController
中でUINavigationController
、私はそれら素敵を維持し、分離したいと思います。
回答:
はい。ただし、プログラムで行う必要があります。
// 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];
Xcode 7以降では、ストーリーボードリファレンスを使用してこれをグラフィカルに行うことができます。
ストーリーボード参照をストーリーボードに追加します。ViewControllerとストーリーボードリファレンスの間にセグエを作成(Ctrl +ドラッグ)
次に、このフィールドに入力します。
「Tutorial」は「Tutorial.storyboard」ファイルで、「MainTutorialController」はViewControllerSettingsの「Storyboard ID」フィールドです
UIStoryboardSegueは抽象クラスであるため、手動でセグエを実行することはできません。perform
何かを実行するには、サブクラス化して実装する必要があります。彼らは本当にストーリーボードで作成されることを意図しています。ただし、ビューコントローラーを手動でプッシュすることもできます。これは優れたソリューションです。lnafzigerの答えはこれをうまく行います:
UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];
UIViewController *theTabBar = [secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];
[self.navigationController pushViewController:theTabBar animated:YES];
ただし、注意すべき点の1つは、物事をうまく分離したいということです。ストーリーボードのアイデアは、すべての設計作業を1か所で行いながら、物事を分離しておくことを可能にすることです。各ビューコントローラーは優れており、ストーリーボード内で他のコントローラーから分離されています。全体のアイデアは、すべてを1つの場所に保持することです。整然とレイアウトして整理されるようにしてください。本当に正当な理由がない限り、分離しないでください。
UITabBarControllersをUINavigationControllerに配置しないでください。Apple はこの種の封じ込めをサポートしていないため、不正な自動回転やビューのアンロードなどのバグを求めています。
ただし、View Controllerを組み合わせる場合は、包含の順序が重要です。特定の取り決めのみが有効です。子から親への包含の順序は次のとおりです。
- コンテンツビューコントローラー、および柔軟な境界を持つコンテナービューコントローラー(ページビューコントローラーなど)
- ナビゲーションビューコントローラー
- タブバーコントローラー
- 分割ビューコントローラー
これは迅速なバージョンです:
let targetStoryboardName = "Main"
let targetStoryboard = UIStoryboard(name: targetStoryboardName, bundle: nil)
if let targetViewController = targetStoryboard.instantiateInitialViewController() {
self.navigationController?.pushViewController(targetViewController, animated: true)
}