巻き紙電卓が、米国Appleストア(ファイナンス部門)でなんと109位になりましたので、記念撮影。維持いてくれるといいけどなぁ・・
2011年1月15日土曜日
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 ];
}
#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 ];
}
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 ];
}
登録:
投稿 (Atom)