2011年6月26日日曜日

UIViewControllerを分割する

UIが複雑になってくるとUIViewControllerが非常に巨大になってきて困っている方も多いのではないでしょうか。
そのような場合には以下の方法があります。
・再利用可能なUIView部品を作成し、コントロールの一部を組み込む。
・UIViewControllerをオブジェクト分割する

再利用可能なUIView部品の作成方法については下記にあるため参考とされたい。ここでのContrntViewは恐らくIBOutletで本体のViewに接続されてたものと思われます。
http://www.awaresoft.jp/development/35-iphone-app/93-create-reusable-ui-with-interface-builder.html

ここでは、後者、すなわち、Nibファイルは一個のままでUIViewControllerを分割する方法を記録します。

−−−*.h−−−−

まず分割したいオブジェクトのヘッダファイルを記述します。

#import
@interface decimalMode : NSObject {
NSString *now;
UIButton *zeroButton, *add2Button , *twoButton, *FButton;

}
@property (nonatomic, retain) NSString *now;
@property (nonatomic, retain) IBOutlet UIButton *zeroButton, *add2Button , *twoButton, *FButton;
-(void) zero ;
-(void) add2 ;
-(void) two ;
-(void) flowting ;
@end

オブジェクト分割時の基本は、オブジェクトの操作をメソッド化(ここではzero- flowting)し、状態の読み取りをプロパティ化することにあります。
そして、操作するUIをアウトレットか化します(ここでは、zeroButton-FButton)。


−−−*.m−−−−


つぎに、実行ファイル(*.m)を記載しますが、ここでの注意点はNibが起動した際に、このオブジェクトを包含して起動してもらうことです。そのために以下のコードを付加します。


-(void) awakeFromNib {
    [super awakeFromNib];
}

あとは普通にzeroからflowtingまでの処理(ここではUIButtonの色操作)を実装します。


−−−*.xib−−−−

次にNibファイルにLibraryからオブジェクトを導入します。
この際、Command+F4でオブジェクトを追加したオブジェクトに変更します。
そうするとIBOutletで指定した足がCommand+F2とかで見ることができると思います。
この足を、マウス右クリック等で、該当するUI部品(この場合はボタン)と連接します。
ーーー*.UIViewController.hーーー

さらにUIViewContrller.hに、当該オブジェクトのヘッダファイルをインポートし、
さらに当該オブジェクトをアウトレット指定します。


#import "decimalMode.h"
@interface makidenViewController : UIViewController{
      ....


decimalMode *DecimalMode;
}

....
@property (nonatomic, retain) IBOutlet decimalMode *DecimalMode;

@end



さらに、InterfaceBuilderに戻り、File's OWnerから実装したオブジェクト(ここではDecimalMode)
に向けて、マウス右クリックしながらのドラックなどで、このアウトレットをオブジェクトとリンクします


ーーー*.UIViewController.m ーーー

お決まりの@synthesizeや=nil, [... release]を実装さえすれば、
オブジェクトが自動でロードされるため、初期化処理なしでいきなり当該オブジェクトを呼び出すことができます。

[DecimalMode zero];


以上です。やったね。

0 件のコメント:

コメントを投稿