要約:私はビューAとビューBの間で切り替えることができる2つのフルスクリーン表示をしたいと思います。私はタブバーコントローラを使うことができますが、私はしたくありません。私はこれがどのように手で行われているのかを知りたいと思っています。View Controller:ビューをプログラムで切り替えるにはどうすればよいですか?
Iは、ルート・コントローラとして動作するのUIViewControllerた:
@interface MyRootController : UIViewController {
IBOutlet UIView *contentView;
}
@property(nonatomic, retain) UIView *contentView;
@end
contentViewは私はペン先の「ビュー」のサブビューとして追加のUIViewにフックアップされています。これは緑色で、全画面表示です。正常に動作します。
次に、他の2つのView Controllerも同じように作成しました。 ViewControllerAおよびViewControllerB。 ViewControllerAは青い背景を持ち、ViewControllerBは黒の背景を持っています。どちらがアクティブかを確認するだけです。
ので、myRootControllerの実装では、私はこれを行う:ところで
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
ViewControllerA *vcA = [[ViewControllerA alloc] initWithNib];
[self.contentView addSubview:vcA.view];
[cvA release];
}
を、-initWithNib方法は、次のようになります。作品
- (id)initWithNib { // Load the view nib
if (self = [super initWithNibName:@"ViewA" bundle:nil]) {
// do ivar initialization here, if needed
}
return self;
}
を。私はViewControllerAから私がアプリケーションを起動すると、ビューが表示されます。しかし、今大きな問題があります:View Controllerは通常、以下のようなメソッドをすべて持っています:
- (void)viewWillAppear:(BOOL)animated;
- (void)viewDidDisappear:(BOOL)animated;
- (void)viewDidLoad;
...など。タブ・バー・コントローラーを使わずに「私」のやり方をすれば、誰が何を、どのように、あるいはそれらのメソッドを呼び出すことができますか?つまり、ViewControllerのクラスを割り当ててビューを表示すると、それらのメソッドを呼び出す際に気を配らなければなりませんか? viewWillAppear、viewDidDisappear、またはviewDidLoadがどのように知っていますか?私は、Tab Bar Controllerはこの「賢さ」をフードの下にすべて持っていると信じています。または私は間違っていますか?
更新:私はそれをテストしました。 View Controller(たとえば:ViewControllerA)を解放すると、viewDidDisappearにログメッセージは表示されません。 ViewControllerAを割り当てて初期化するときだけ、私はviewDidLoadを取得します。しかし、それだけです。だから、すべての印はUITabBarControllerの巧みさを表しています;)それを複製する方法を理解する必要があります。
いいえ、私はナビゲーションやタブバーは必要ありません;)私はちょうどボタン "Bに行く"と、他の "Aに行く"と裸のビューが欲しいです。または、上にそのナビゲーションバーを持たない方法がありますか? – Thanks
画面に表示したくない場合は、ナビゲーションバーを非表示にすることができます。私は情報で答えを更新します。 –