1つのストーリーボードにいくつかUIViewControllers
あります。UIViewControllers
次に、いくつかを別のストーリーボードに移動したいと思います。出来ますか?
10 に答える
はい、可能です。
- コピーするコントローラーを選択します
- Command+を押しますC
- 2番目のストーリーボードファイルを開きます
- Command+を押しますV
注:「IBOutletsはコピー後もそのままです(Xcode 6.3.2で検証済み)。」
コピーすることは可能ですが、1つのプロジェクトで両方のストーリーボードを一度に開いてから、コピーして貼り付ける必要があります。
Xcode 8では、特にビューコントローラを別のストーリーボードに移動する場合は、Cmdで移動するビューコントローラを選択し、ビューコントローラをクリックするだけです。それらを選択したまま、[エディター]タブに移動し、[ストーリーボードにリファクタリング]を選択します。新しいストーリーボードファイルの名前を尋ねられ、Enterキーを押します。
選択したビューコントローラを含む新しいストーリーボードファイルが作成されます。Main.storyboardでは、そのViewControllerの代わりにStoryboardReferenceオブジェクトが表示されます。これは、作成したばかりの新しいストーリーボードへの参照です。
コピーアンドペースト(Command + C、Command + V)は正常に機能しますが、Xcodeは元の接続を保持しているように見えるため、アウトレット接続を解決することを忘れないでください。プロジェクトを閉じて再度開き、問題を削除して、欠落している接続を再確立します。
コピー/貼り付けは可能ですが、Xcodeのアシスタントエディタを使用して両方のストーリーボードを並べて開いている場合にのみ機能します。
Cut-n-Pasteの使用に失敗した場合は、回避策があります。貼り付け中のファイルにViewControllerがある場合、貼り付けは失敗します。そのため、貼り付けるストーリーボードを選択できなくなります。XCodeは貼り付けを拒否します。したがって、最初に空のViewControllerをライブラリからストーリーボードにドラッグする必要があります。次に、ストーリーボードでこのviewControllerを選択すると、貼り付けが機能します。貼り付けが完了したら、ダミーのviewControllerを削除できます。二度と必要ありません。
インターフェイス要素は、コピー/貼り付けを介してXibファイルとストーリーボードファイル間で移動できます。
これはもともと私にとってはうまくいきませんでした。UICollectionViewCellを専用のXibからメインストーリーボードにコピーしようとしました。セルはストーリーボードにコピーされません。
解決策は、ストーリーボードで特定の親要素を選択することでした。UICollectionViewCellは、ストーリーボードのUICollectionViewの子として貼り付けることができますが、それ以外の場合は貼り付けることができません。
特定のアイテムの貼り付けに問題がある場合は、貼り付ける前に、有効な親要素が選択されていることを再確認してください。
私は同様の状況に遭遇しました。メインストーリーボードにはシーンが多すぎて、リファクタリングする必要があります。私が最初に持っていたアイデアは、いくつかをマークし、多くの人が提案したようにコピーペーストを行うことでした。ただし、ViewControllerコードへのストーリーボード接続の解決について心配していました。多くの検索の結果、iOS 9以降、「Storuboardにリファクタリング」できる新機能があることがわかりました。ソースストーリーボードで複数のシーンにマークを付けることができ、[エディター]メニューからそのオプションを選択できます。次に、選択したすべてのシーンが古いストーリーボードから抽出され、新しいストーリーボードが作成され、古い/メインストーリーボードのストーリーボードへのリンクも作成されます。便利なチュートリアルは次のとおりです。https://code.tutsplus.com/tutorials/ios-9-staying-organized-with-storyboard-references--cms-24226 https://www.raywenderlich.com/115697/ios-9-storyboards-tutorial-whats-new-in-storyboards
この新しい公式ストーリーボードリファクタリング機能が、この種の問題に対するより良い解決策を提供できることを願っています。
1つのViewControllerクラスを2つのStoryBoardコントローラーと共有する必要がある同様の状況になりました。
どうやら、解決策は十分に単純でした:
- 画面をストーリーボードとコードに分割する
- ストーリーボードから、クラスとの接続が欠落しているコントロールを選択します
- 接続インスペクターで、参照アウトレット内の円をクリックして、クラスコントローラー内のコードにドラッグします。
- XCodeは、接続を作成しようとしている@IBOutletを自動的に強調表示します。
- マウスを離すとすぐに、IBとクラスのコントロール間に接続が作成されます
これが十分に明確で役立つことを願っています
可能だと思います…。
UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];
UIViewController *theTabBar = [secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];
[self.navigationController pushViewController:theTabBar animated:YES];