forked from mixi-inc/iOSTraining
-
Notifications
You must be signed in to change notification settings - Fork 0
2.3 Custom Container View Controller
tamotamago edited this page Apr 16, 2013
·
3 revisions
UINavigationController Class Reference | View Controller Programming Guide for iOS
iOS 5 から UIViewController の property に childViewControllers がつかされ、UINavigationController や UITabBarController のようなコンテナを自作できるようになりました。
UIViewController の view を addSubView するだけでは呼び出されない以下のメソッドが適切に呼び出される点が利点です。
- viewWillAppear:
- viewDidAppear:
- viewWillDisappear:
- viewDidDisappear:
- willRotateToInterfaceOrientation:duration:
- willAnimateRotationToInterfaceOrientation:duration:
- didRotateFromInterfaceOrientation:
自作コンテナを作ってみましょう
MixiViewController.m
#import "MixiViewController.h"
#import "MixiFirstViewController.h"
#import "MixiSecondViewController.h"
@interface MixiViewController ()
@property (weak, nonatomic) IBOutlet UIView *dummyView;
- (IBAction)pressFirstButton:(id)sender;
- (IBAction)pressSecondButton:(id)sender;
@end
@implementation MixiViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
MixiFirstViewController *fvc = [[MixiFirstViewController alloc] init];
[self addChildViewController:fvc];
fvc.view.frame = _dummyView.frame;
[self.view addSubview:fvc.view];
[fvc didMoveToParentViewController:self];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)transitionFromViewController:(UIViewController *)fromViewController
toViewController:(UIViewController *)toViewController
{
[fromViewController willMoveToParentViewController:nil];
[self addChildViewController:toViewController];
toViewController.view.frame = CGRectMake(0, -_dummyView.frame.size.height, _dummyView.frame.size.width, _dummyView.frame.size.height);
[self transitionFromViewController:fromViewController
toViewController:toViewController
duration:0.5
options:0
animations:^{
toViewController.view.frame = fromViewController.view.frame;
fromViewController.view.frame = CGRectMake(0, 50, _dummyView.frame.size.width, _dummyView.frame.size.height);
} completion:^(BOOL finished) {
[fromViewController removeFromParentViewController];
[toViewController didMoveToParentViewController:self];
}];
}
- (IBAction)pressFirstButton:(id)sender
{
UIViewController *currentVC = self.childViewControllers[0];
MixiFirstViewController *newVC = [[MixiFirstViewController alloc] init];
[self transitionFromViewController:currentVC toViewController:newVC];
}
- (IBAction)pressSecondButton:(id)sender
{
UIViewController *currentVC = self.childViewControllers[0];
MixiSecondViewController *newVC = [[MixiSecondViewController alloc] init];
[self transitionFromViewController:currentVC toViewController:newVC];
}
@end
MixiViewController.xib
- 導入
- Objective C の基礎
- メモリ管理
- UIViewController1 - UIViewController のカスタマイズ
- UIViewController2 - ModalViewController
- UIViewController3 - ライフサイクル
- UIKit 1 - container, rotate-
- UINavigationController
- UITabController
- Custom Container View Controller
- Supporting Multiple Interface Orientations
- UIKit 2- UIView -
- UIView
- UIView のカスタマイズ
- UIView Animation
- UIKit 3 - table view -
- UITableView について
- UITableViewとNavigationController
- custom UITableViewCell の作成
- 4.4 UITableViewのその他のオプション、カスタマイズ
- UIKit 4 - images -
- UIImage (CoreGraphics)
- UIImageView
- Accets Library
- CoreImage
- UIKit 4 - text -
- UILabel
- UITextView
- KeybordNotification
- 非同期処理系
- NSURLConnection (json シリアライザ)
- Blocks
- GCD
- ローカルキャッシュ
- UserDefaults
- FileManager
- CoreData
- SQLite
- Instruments
- leak
- time profiler
- その他
- 単体テスト (GHUnit)
- 結合テスト (KIF)
- cocoaPods でライブラリ管理