「クラシック nib ベース」と「ストーリーボード」ベースの iPhone 開発ワークフローの違いと、それぞれのコーディング スタイルとアプローチを学ぼうとしています。
そこで、iOS -> アプリケーション -> SingleView アプリケーションをテンプレートとして使用して、XCode 4.5 で新しい空の iPhone アプリを作成しました。これを、ルート コントローラーおよびアプリケーションのルート ビューとしてタブ バー コントローラーを使用するアプリに変換する方法を理解したいと考えています。
iPhone nib の空のルート ビューを削除し、そのビューを TabBarController のビューに置き換えようとしました。
実行時にこの例外が発生し、アプリが中止されます。
"A view can only be associated with at most one view controller at a time"
明らかに、私はここでルールを破っており、ビューに関連付けられた TabBarController を持ち、そのビューをファイルの所有者接続が指すビューにもすることは許可されていません。では、これを行うための通常の慣用的な方法は何ですか? 元の空のビューをそのままにして、実行時に tabbarcontroller ビューをサブビューにしますか? それとも他のテクニック?
注: 別のテンプレートの選択を求めているわけではありません。また、ストーリーボードが含まれる場合にこれを最も簡単に行う方法を求めているわけでもありません。ストーリーボードなしで、従来のペン先のみを使用してこれを行う方法を尋ねています。ペン先でインスタンス化された「ストック ui タブ コントローラー」オブジェクトがどのように機能するかを理解したいと思います。
更新: デフォルトの template-generated-single-view-templates のビュー コントローラー オブジェクトを取り除くことで、エラーを取り除くことができます。これで、黒い空のウィンドウでリンクして実行され、ルート ビューが表示されないアプリができました。Interface Builder を使用して、IUTabBarController をアプリ デリゲートのプロパティに接続しようとしました。
@property (strong, nonatomic )IBOutlet UIViewController *viewController; // I added IBOutlet
そして私のアプリデリゲートで:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
_window.rootViewController = _viewController;
}
次に、そのアウトレットを nib でインスタンス化された UITabBarController オブジェクトに接続しました。
これはうまくいくはずだと私には思えました。実行できますが、ルート ビューがありません。