2011年1月10日月曜日

iPhoneアプリ マルチビューアプリの基本2

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 件のコメント:

コメントを投稿