2.5 ルートビューコントローラに必要なアウトレットを定義する(RootViewController.h)。
#import < UIKit / UIKit.h >
@class ViewController1;
@class ViewController2;
@interface RootViewController : UIViewController {
ViewController1 * viewController1;
ViewController2 * viewController2;
}
@property (nonatomic, retain) ViewController1 * viewController1;
@property (nonatomic, retain) ViewController2 * viewController2;
-(IBAction)switchViews:(id)sender;
@end
2.6 MainWindow.xibを修正し、ルートビューコントローラを組み込む
MainWindow.xib にUIViewController (View Controller)をライブラリからドラック&ドロップし、インスペクタのClass IdentityにあるClass を UIViewController からRootViewControllerに変更する。
2.7 ルートビューコントローラのビューを作成する。
ManWindow.xibに組み込んだルートビューコントローラをダブルクリックして表示される画面に、ライブラリからUIViewをドラック&ドロップしViewを作成するか、ルートビューコントローラにnibファイルを生成している場合は、当該nibファイルを編集し、ルートビューコントローラのビューを作成する。
すでにビューを作成している場合も、MainWindow.xibのビューコントローラに新たに作成したルートビューコントローラを組み込めば、新たな画面遷移を実装することができる。
この際、2.5でIBActionをコーディングしていれば(例ではswitchViews)、該当するボタン等からViewContollerアイコンへドラックしてアクションをリンクする。
2.8 ルートビューコントローラを実装する(RootViewController.m)。
#import "RootViewController.h"
#import "ViewController1.h"
#import "ViewController2.h"
@implementation SwitchViewController;
@synthesize viewController1;
@synthesize viewController2;
- (void) viewDidLoad {
ViewController1 *controller1 = [[ViewController1 alloc ] initWithNibName:@"viewController1" bundle:nil ];
self.viewController1 = controller1;
[ self.view insertSubview: controller1.view atIndex:0 ];
[ controller1 release ];
[ super viewDidLoad ];
}
-(IBAction) switchViews:(id)sender{
if ( self.viewController2.view.superview == nil ) {
if ( self.viewController2 == nil ) {
ViewController2 *controller2 = [[ ViewController2 alloc ] initWithNibName:@"viewController2" bundle:nil ];
self.viewController2 = controller2;
[ controller2 release];
}
[viewController1.view removeFromSuperView];
[self.view insertSubview: viewController2.view atIndex:0];
}
else {
if (self.viewController1 == nil) {
ViewController1 *controller1 = [[ViewController1 alloc ] initWithNibName:@"viewController1" bundle:nil ];
self.viewController1 = controller1;
[controller1 release ];
}
[viewController2.view removeFromSuperview];
[self.view insertSubview:viewController1.view atIndex:0];
}
-(void) didReceiveMemoryWarning {
[super didReceiveMemoryWarning ];
if (self.viewController1.view.superview == nil) {
self.viewController1 = nil
}
else {
self.viewController2 = nil;
}
}
-(void) dealloc {
[ viewController1 release ];
[ viewController2 release ];
[ super dealloc ];
}
0 件のコメント:
コメントを投稿