TabBarに引き続き、複数のViewControllerを切り替える方法。
意外とあっさりだが、やはりハマりどころがあったので、メモをしておく。
スケルトンプロジェクトを作成
View-based Applicationで、プロジェクト名は「ViewChangeEX」。
新しいViewControllerを追加
"ファイル"->"新規ファイル"で"UIViewController subclass"を作成、"With XIB for user interface"にチェックを入れる、ファイル名は"ViewChangeEXSecondViewController"、ヘッダーファイルも生成するようにチェックを入れる。
これで、ヘッダー、モジュール、XIBの3つのファイルができる。
新しいViewControllerへの参照を"ViewChangeEXAppDelegate"に追加
ヘッダーに、以下の通り追加。
モジュールの先頭に以下を追加
@class ViewChangeEXViewController;
@class ViewChangeEXSecondViewController;
@interface ViewChangeEXAppDelegate : NSObject{
UIWindow *window;
ViewChangeEXViewController *viewController;
ViewChangeEXSecondViewController* sencondviewController;
}@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet ViewChangeEXViewController *viewController;
@property (nonatomic, retain) IBOutlet ViewChangeEXSecondViewController* secondviewController;
@end
#import "ViewChangeEXAppDelegate.h"
#import "ViewChangeEXViewController.h"
#import "ViewChangeEXSecondViewController.h"@implementation ViewChangeEXAppDelegate
@synthesize window;
@synthesize viewController;
@synthesize secondviewController;
MainWindow.xibへ、新しく作った"ViewChangeEXSecondViewController"を追加する
- "MainWindow.xib"を(Interface Builderで)開く
- Libraryを開き、ViewControllerを選んで、XIBウィンドウにドロップ
- Identity Inspectorで参照クラスを"ViewChangeEXSecondViewController"に変更
- XIBウィンドウで、"ViewChangeEX App Delegate"を右クリック(=二本クリック)し、"Outlets"の"secondviewController"を、上で追加したViewControllerとつなぐ
これを、忘れていたため、今回はハマった。
これをしないと、SecondViewControllerをaddしても、Windowに追加されないのだ。
"ViewChangeEXAppDelegate"にViewControllerを切り替えるメソッドを追加
モジュールに以下を追加。
- (void) change1to2
{
// [ viewController.view removeFromSuperview ];
// [ window addSubview: secondviewController.view ];
[ UIView transitionFromView:viewController.view
toView:secondviewController.view
duration:1.0
options:UIViewAnimationOptionTransitionFlipFromRight
completion:nil ];
}- (void) change2to1
{
// [ secondviewController.view removeFromSuperview ];
// [ window addSubview: viewController.view ];
[ UIView transitionFromView:secondviewController.view
toView:viewController.view
duration:1.0
options:UIViewAnimationOptionTransitionFlipFromLeft
completion:nil ];
}
各ViewControllerにViewControllerを切り替えるメソッドを追加
ヘッダーに、
モジュールに、
- (IBAction) change;
みたいな感じ。
- (IBAction) change
{
ViewChangeEXAppDelegate* appDelegate = (ViewChangeEXAppDelegate*) [ [ UIApplication sharedApplication ] delegate ];
[ appDelegate change1to2 ];
}
各ViewControllerのxibを開いて、メソッドを呼ぶボタンを配置して、メソッドとつなぐ。
後はビルドすれば、ボタンを押すとデフォルトのViewControllerと追加したViewControllerを行ったり来たりできるはずだ。