2011年1月15日土曜日

巻き紙電卓 米国Appleストアで109位!!


巻き紙電卓が、米国Appleストア(ファイナンス部門)でなんと109位になりましたので、記念撮影。維持いてくれるといいけどなぁ・・

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 ];
}

2011年1月9日日曜日

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

iPhoneアプリのマルチビューアプリを作る場合の基本を再確認したいと思います。(はじめてのiPhone 3プログラミングより)

1.アプリケーションの構成
画面数に応じ、コントローラ、nibファイルを作成する。アプリケーションデリゲートは1つのみ。


・MainWindow.xibには、File's Owner, First Responder, App Delegate, ViewControllerとMainWindow(Window)がある。

・ビュー表示を管理するコントロールクラス(ルートコントローラクラス)を作成する。
ルートコントローラクラスは、他のビューを取り込んで、ユーザの操作とともに該当するビュー(コンテントビュー)を表示する。
・コンテントビューの表示にあたって、ルートコントローラクラスは、ルートコントローラのサブビューとして表示するコンテントビューを配置する。変更の操作がされた場合には、現在表示しているビューコントーラを追い出し、操作に応じたビューコントローラを取り込む。

・ コンテントビューは、ビューコントローラ、nib、UIViewのサブクラスから成る。

2.実装

2.1 アプリケーションデリゲートの作成
・新規プロジェクトとして、Window-base Applicationを作成する。

2.2 ルートコントローラクラスの作成
・新規ファイルとして、UIViewController subclass を作成する(XIB user interfaceはチェックしない)

2.3 コンテントビューコントローラクラスとnibファイルの作成
・ルートコントローラクラスと同様に作成する。
・新規ファイルとして、User InterfaceからView XIBを選択し、xibファイルを作成する
  (XIB user Interface をチェックしてコンテントビューコントローラクラスを作成したほうがいいように思う)

2.4 アプリケーションデリゲートの修正
・Appdelegate.hにクラスの前方宣言で、ルートコントローラクラスを宣言、ルートコントローラクラスを定義し、アウトレット宣言する。

     #import< UIKit/UIKit.h >
      @class RootViewController;
      @interface name_Appdelegate:NSObject {
          UIWindows * window;
          RootView Controller *rootVieewController;
    }

     @property (nonatomic, retain) IBOutlet UIWindow *window;
     @property (nonatomic, retain) IBOutlet RootViewController *rootViewController;
     @end

・Appdelegate.mにルートビューコントローラクラスをインポートし、ウインドウにAddViewする。

    #import "name_Appdelegate.h"
    #import "RootViewController.h"
    @implementation name_Appdelegate

    @synthesize window;
    @synthesize switchViewController;

-(void) applicationDidFinishLaunching:(UIApplication *) application{
     [ window addSubview : rootViewController.view];
     [ window makeKeyAndVisible ];
}

-(void) dealloc {
    [ window release ];
    [ rootViewController release ];
    [ super dealloc ];  
}