1

バックグラウンド:

インターフェースの一部としてタブバーを持つアプリケーションがありますが、タブバーコントローラーを使用していません...多くの理由で意図的にこれを行ったので、アプリをタブバーとして書き直して答えないでくださいそれは役に立たないからです。

ビュー コントローラーは画面やタブなどをうまく制御しますが、今度はまったく別のビューをアプリケーションに追加したいと考えています。はい、ビューを既存の .XIB に配置してから、そのすべてのコントロールを既存のビュー コントローラー クラスに配置することもできますが、すでに多くのことが行われているため、このビューを独自のビュー コントローラーに関連付けたいと考えています。ボタンを押すだけで効果的に起動します。

さて、タブバーコントローラーモデルで、タブに関連付けられた新しいビューコントローラーを追加しても問題ありませんが、タブバーコントローラーを使用していないため、少し迷っています。私はこれが基本的なものであることを知っていますが、私はそれを見ていませんが、XIB ではビューコントローラーをタブバーまたはタブバー項目に追加する方法がありません。ビューをIBに簡単に追加できますが、コントローラーが関連付けられておらず、そのビューのすべての制御コードもメインコントローラーの一部にする必要があります。これは可能ですが、分離することをお勧めします、このビューは、他のユーザー インタラクションおよびビューに関連する他のすべての機能とは完全に異なるためです。

それで、これを達成するための最良の方法は何ですか?タブ バー プレスで ViewController をインスタンス化し、そのビューをサブビューとしてメイン ウィンドウに追加しますか? 私はこれがうまくいくと思いますが、これは少しぎこちないようです..ビューを表示してそれをveiwコントローラーに結び付ける他の方法はありますか?

4

2 に答える 2

3

iOS 5 のビュー コントローラー コンテインメントを使用する場合viewDidLoadは、最初のビュー コントローラーをインストールします。私は通常childView、親コントローラーの NIB/ストーリーボードでビューを定義します。これは、サブビューが配置される場所を決定します (これは、遷移をアニメーション化し、アニメーションをサブビューに制限したい場合に特に役立ちます)。

OneViewController *controller = [[OneViewController  alloc] initWithNibName:@"OneViewController"  bundle:nil];

[self addChildViewController:controller];
[controller didMoveToParentViewController:self];
[childView addSubview:controller.view];

次に、たとえば 2 番目のタブをクリックして、次のコントローラーに移動する場合は、次のように呼び出しtransitionFromViewControllerます。

[self addChildViewController:newController];

[self transitionFromViewController:oldController 
                  toViewController:newController
                          duration:0.5
                           options:UIViewAnimationOptionTransitionCrossDissolve
                        animations:^{
                            // do any other animation of the parent view that you want coordinated with the transition, e.g., I'm going to replace the nav bar title
                            [self updateTitles:newController];
                        }
                        completion:^(BOOL finished){
                            [oldController willMoveToParentViewController:nil];
                            [oldController removeFromParentViewController];
                            [newController didMoveToParentViewController:self];
                        }];

明らかに、これらすべてを実行すると、標準のタブ バー コントローラーの機能を再現するために多くの作業が行われますが、それにはやむを得ない理由があると思います。

于 2012-07-23T23:20:20.333 に答える
0

最後の段落で提案したことは機能します...ほとんどの場合。:-) ビュー コントローラーは、実際には「画面一杯のコンテンツ」を管理することを目的としているため、これを試す場合は、ビューのアンロードまたはリロード、自動回転、およびその他の微妙な問題に備えてください。Apple のビュー コントローラー プログラミング ガイドの次のアドバイスに従うのが賢明かもしれません。

注: ビュー階層を複数のサブエリアに分割し、それぞれを個別に管理する場合は、ビュー コントローラー オブジェクトの代わりに汎用コントローラー オブジェクト (NSObject から派生したカスタム オブジェクト) を使用して、各サブエリアを管理します。次に、単一のビュー コントローラー オブジェクトを使用して、汎用コントローラー オブジェクトを管理します。

于 2012-07-23T20:14:42.283 に答える