Skip to content

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

xib

  1. 導入
  2. Objective C の基礎
  3. メモリ管理
  4. UIViewController1 - UIViewController のカスタマイズ
  5. UIViewController2 - ModalViewController
  6. UIViewController3 - ライフサイクル
  7. UIKit 1 - container, rotate-
  8. UINavigationController
  9. UITabController
  10. Custom Container View Controller
  11. Supporting Multiple Interface Orientations
  12. UIKit 2- UIView -
  13. UIView
  14. UIView のカスタマイズ
  15. UIView Animation
  16. UIKit 3 - table view -
  17. UITableView について
  18. UITableViewとNavigationController
  19. custom UITableViewCell の作成
  20. 4.4 UITableViewのその他のオプション、カスタマイズ
  21. UIKit 4 - images -
  22. UIImage (CoreGraphics)
  23. UIImageView
  24. Accets Library
  25. CoreImage
  26. UIKit 4 - text -
  27. UILabel
  28. UITextView
  29. KeybordNotification
  30. 非同期処理系
  31. NSURLConnection (json シリアライザ)
  32. Blocks
  33. GCD
  34. ローカルキャッシュ
  35. UserDefaults
  36. FileManager
  37. CoreData
  38. SQLite
  39. Instruments
  40. leak
  41. time profiler
  42. その他
  43. 単体テスト (GHUnit)
  44. 結合テスト (KIF)
  45. cocoaPods でライブラリ管理

edit sidebar

Clone this wiki locally