タブバーコントローラー内に、まったく新しい非ストーリーボード(プレーンな古いペン先)スタイルのナビゲーションコントローラーを追加しようとしています。
XCodeに「タブバーアプリケーション」と呼ばれる新しいプロジェクトテンプレートがあることを前提としたこのデモを見つけました。そうではありません。現在、XCode4.6には「新しいタブ付きアプリケーション」があります。もちろん、Appleは彼らの偉大な知恵で、メインウィンドウのペン先(.xib)を使用せず、タブバーコントローラーとそのページを、新しいユーザーフレンドリーなNIBではなくアプリデリゲートでコード化する必要があると判断しました。インスタンス化されたタブコントローラ。これは、その方が柔軟性が高く、ユーザーに表示されるタブと表示されないタブを決定するコードを記述できるためだと思います。ストーリーボードをオンにすると、視覚的にすべてを実行できると思います。
私は、XCodeのバージョンの違いの長く苦しんでいる歴史に深く混乱しています。これは、さまざまなiOSバージョンとさまざまなXCodeバージョンを参照し、XCodeのバージョンに固有の仮定を行う、Web上のスタックオーバーフローとデモに関する既存の質問の有効性に影響を与えます。とiOSは現在変更されているように見え、それぞれMain Nib File Base Name
が設定されているかどうかの内容に関して異なる選択に依存しています。
また、ストーリーボードの作成の背後にある主な動機は、ストーリーボード前のペン先と、さまざまなUIKitウィジェットとコントローラーを組み合わせる複雑さであるように思われます。
私は、このアップルの心の変化の前に作成されたように見える実際の非ストーリーボードのペン先ベースのアプリケーションで作業しています。起動時に、多くの不要なビューがペン先のインスタンス化によって自動的に作成されてから削除されることがわかります。タブバーコントローラのタブを動的に非表示および表示するため。これはAppleで多くのことを考えられていたようで、XCodeでの新しいアプリケーションの生成方法を変更することで、推奨される方法を暗黙的に変更しました。私は彼らの知恵に疑問を抱いていません。実際、私はその変化に感謝していますが、それは私を失い、混乱させました。
とにかく、私はメインタブバーのタブ内にナビゲーションコントローラーを配置しようとしています。XCodeがメインウィンドウを生成し、「タブバーアプリケーション」を生成するために使用したときに起動されているはずのアプリケーションがすでにあります。タブ付きビューであるトップレベルビューであり、タブバーコントローラーがペン先でインスタンス化されます。上記のデモは同じことを前提としています。
Appleは、タブバーとナビゲーションコントローラのこの明らかな組み合わせのデモを提供したことがないことで有名です。またはそう言われています。そして、Apple Human InterfaceGuidelinesは明らかにナビゲーションコントローラーをタブバーの中に置く方が良いと述べています(またはその逆よりも良いです)、そして私の質問は可能な限りHIGに準拠したいと思っていると理解されるべきです、それで私は信じます推奨されている組み合わせではなく、推奨される組み合わせについて質問しています。
これが私がこれまでに試したことです:
2009年頃から、このブログ投稿をフォローしようとしました。これは、もはや真実ではない古いバージョンのXCodeについて真実であると想定しています。
XCodeが生成した新しいタブ付きアプリケーションから始めて、ストーリーボードをオフにして、アプリの起動時に明らかに作成されるルートアプリデリゲート.mファイル、完全にコード内のタブバーコントローラーオブジェクト、およびメインウィンドウのペン先はありません。次のコードは完全にAppleによって書かれています。タブのいずれかをナビゲーションバーに変更したい場合、(比較的新しいCocoa開発者として)どこに侵入して新しいものを配置するのか疑問に思っています。およびそれに関連するUINavigationViewController:
-このマーカーは、stackoverflowの破壊されたマークダウンシステムが混乱しないようにするのに役立ちます-
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
UIViewController *viewController1, *viewController2;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
viewController1 = [[RPDAFirstViewController alloc] initWithNibName:@"RPDAFirstViewController_iPhone" bundle:nil];
viewController2 = [[RPDASecondViewController alloc] initWithNibName:@"RPDASecondViewController_iPhone" bundle:nil];
} else {
viewController1 = [[RPDAFirstViewController alloc] initWithNibName:@"RPDAFirstViewController_iPad" bundle:nil];
viewController2 = [[RPDASecondViewController alloc] initWithNibName:@"RPDASecondViewController_iPad" bundle:nil];
}
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = @[viewController1, viewController2];
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
コードを書かなくても可能だったことが(私がリンクしたブログの2009年の例によると)、今では純粋にコードで行われているようです。私は約500ページの「ProgrammingiOS5」を読み、最初のアプリで数百時間作業し、多くのデモアプリケーションを試しましたが、まだ比較的経験の浅いCocoa / iOS開発者であり、私の一部だと思います。これらすべての混乱は「コントローラーとビュー」のパターンであり、コードとペン先の両方でそれらを組み合わせるためのルールは、私には完全には明確ではありません。
-
更新:あなたはcodezを持つことができます!私のような将来のXCode-cocoa-iOS初心者を支援するために、完全なデモアプリを作成し、ここのgithubに投稿しました。
スクリーンショット: