3

アプリのフルバージョン、ライトバージョン、無料バージョンを開発する予定です。(または少なくともそのうちの2つ)

以前は、ストーリーボードなしで、別のターゲットを追加してコンパイラ変数を設定し、#if / else/endifステートメントを使用してバージョン間の差異を管理していました。これまでのところすべて問題ありません。

今回は初めて絵コンテを使いました。約50のビューコントローラがあります。そして今、私はそれにどう対処するかという問題に直面しています。特に、フルアプリはタブバーベースであり、ライトバージョンはタブバーなしで使用する必要があるため(フルバージョンのタブの1つに対応する機能を超えないようにします)。

どうすればこれに対処できますか?2つ目のストーリーボードが必要ですか?ストーリーボード#1のビューをストーリーボード#2と#3で再利用できますか?または、少なくとも2つ目のストーリーボードを開始点としてのみ使用してから、ストーリーボード#1の一部に分岐することはできますか?(繰り返しになりますが、ライトアプリは主にフルアプリのタブの1つにある機能で構成されます)。

率直に言って、どこから始めればいいのかさえわかりません。そのため、これまでに試したことを共有することはできません。ヒントをいただければ幸いです。

4

1 に答える 1

2

さて、ようやく適切な方法を見つけました。探していたものではなかったので、完全に満足しているわけではありませんが、機能し、高度な再利用が可能です。

1)xcodeで新しいターゲットを作成します。

2)Xcodeは、ストーリーボードの2番目のセットを作成します。

3)ストーリーボードはデフォルトで元の名前と同じ名前ですが、異なる場所にあり(xcodeによって新しく作成されました)、各ターゲットに1つずつ割り当てられています。2番目のターゲットに両方のストーリーボードが必要なため、名前を変更しました。名前を変更する必要はありません。各ターゲットが独自のストーリーボードのみを使用する場合。ただし、この場合は名前を変更する必要があります。名前を変更する場合は、ターゲットのプロジェクト設定内で新しい名前を割り当てる必要があります。うまく動作します。

4)私の場合、無料アプリのストーリーボードは基本的にルートビューコントローラーと1つのregluarビューコントローラーで構成されており、ユーザーのメインメニューとして使用できます。私の場合、完全なアプリはタブに基づいており、機能性が低下しているため、無料のアプリはそうではありません。

5)このメインメニューのビューコントローラーは、プログラムで他のストーリーボードのコントローラーを表示します。そのためには、ストーリーボード内のすべてのIDが適切に設定され、一意であることが不可欠です(!)。私の場合、このメニューはいくつかのボタンで構成されています。それらのそれぞれがIBActionを呼び出します。もちろん、代わりにテーブルなどを使用することもできます。

 - (IBAction)newMinutes:(id)sender
 {
     // Get the storyboard named secondStoryBoard from the main bundle:
     UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];

     // Load the view controller with its identifier string 
     // Change UIViewController to the appropriate class
     UIViewController *theTabBar = (UIViewController *)[secondStoryBoard instantiateViewControllerWithIdentifier:@"MinutesMenu"];

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

6)このView Controllerが起動して実行されると、独自のストーリーボード内でうまく機能し、後続のViewControllerなどに完全に移行します。

7)しかし、どこかで私はまだいくつかの変化を起こす必要があります。そのような状況では、各ターゲットのプロジェクト設定に2つのマクロを設定しました。FREEそしてFULLそれらのマクロです。そのため、構成を使用して、プログラムによるセグエなど、わずかに異なるコードをコンパイルできます#ifdef

#ifdef FULL 
  // do this
#else 
  // do that
#endif

また

#ifdef FREE
  // do this
#endif

願わくば、それが同じ状況でTJと他の人々を助けることを願っています。

于 2013-03-06T09:21:19.950 に答える