SlideShare una empresa de Scribd logo
1 de 24
Descargar para leer sin conexión
UIViewControllerの
コンテナ機能
2011.11.19
ふじしげ ゆういち
@nakiwo
コンテナViewController
•ViewControllerの入れ物になる
ViewController
•UINavigationController
•UITabBarController
•UISplitViewController
iOS 5
•自分でコンテナViewControllerを作る
事ができる新機能
@property UIViewController *parentViewController;
@property NSArray *childViewControllers;
- (void) addChildViewController:
(UIViewController *)childController;
- (void) removeFromParentViewController;
ViewViewController
View
ViewViewController
ViewViewController
View
ViewViewController
ViewViewController
View
iOS 4まで
ViewViewController
ViewViewController
View
iOS 5
- (void) addChildViewController:
(UIViewController *)childController;
嬉しい点
• UIViewControllerの各種メソッドを適切に呼び
出してくれる。
viewWillAppear:
viewDidAppear:
viewWillDisappear:
viewDidDisappear:
willRotateToInterfaceOrientation:duration:
willAnimateRotationToInterfaceOrientation:duration:
didRotateFromInterfaceOrientation:
etc..
ViewViewController
ViewViewController
View
ViewViewController
NG View階層をたどって最初に見つかる
ViewControllerがparentViewControllerでない
ViewViewController
ViewViewController
View
ViewContollerが親子関係にあるが
Viewは親子関係にない、はOK
(子を表示したくない場合)
ViewViewController
•addChildViewControllerしても
addSubViewはしてくれないので自分
でやる事
• parentViewControllerはiOS 4以前もある
が、iOS 5で仕様が変わった。
• modalのparentViewControllerの扱い
iOS 4以前 : modalを出したVC
iOS 5 : nil
• iOS 5 では modalと呼びたくないらしい
• modalの親は presentingViewController
/*
If this view controller is a child of a containing view controller
(e.g. a navigation controller or tab bar controller,)
this is the containing view controller.
Note that as of 5.0 this no longer will return the
presenting view controller.
*/
@property(nonatomic,readonly) UIViewController *parentViewController;
// This property has been replaced by presentedViewController.
// It will be DEPRECATED, plan accordingly.
@property(nonatomic,readonly) UIViewController *modalViewController;
// The view controller that was presented
// by this view controller or its nearest ancestor.
@property(nonatomic,readonly) UIViewController *presentedViewController
__OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);
// The view controller that presented
// this view controller (or its farthest ancestor.)
@property(nonatomic,readonly) UIViewController *presentingViewController
__OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);
presentViewController:animated:completion:
dismissViewControllerAnimated:completion:
- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers;
viewWillAppear:
viewDidAppear:
viewWillDisappear:
viewDidDisappear:
willRotateToInterfaceOrientation:duration:
willAnimateRotationToInterfaceOrientation:duration:
didRotateFromInterfaceOrientation:
- (void)willMoveToParentViewController:
(UIViewController *)parent;
- (void)didMoveToParentViewController:
(UIViewController *)parent;
- (void)willMoveToParentViewController:
(UIViewController *)parent;
- (void)didMoveToParentViewController:
(UIViewController *)parent;
• addChildViewControllerは
willMoveToParentViewControllerを呼んでくれる。
• removeFromParentViewControllerは
didMoveToParentViewControllerを呼んでくれる。
• 呼んでくれない方は自分で呼ぶ必要がある。
• アニメーション無しの場合すぐに呼び出し。
• アニメーション有りの場合アニメーション完了後呼び出し。
- (void)transitionFromViewController:
toViewController:
duration:
options:
animations:
completion:
• viewControllerの入れ替えアニメーション
• from/to両方があらかじめ
同じviewControllerの子になっている必要がある。
• fromのsuperviewにtoのviewがaddされる。
• fromのviewは剥がされる。
• viewControllerの親子関係はそのまま。
その他便利メソッド
- (void)viewWillLayoutSubviews;
- (void)viewDidLayoutSubviews;
- (BOOL)isBeingPresented;
- (BOOL)isBeingDismissed;
- (BOOL)isMovingToParentViewController;
- (BOOL)isMovingFromParentViewController;
presentViewController:animated:completion:
dismissViewControllerAnimated:completion:
Demo
ViewVC(left)
rightContainerViewViewController
デモの構成
ViewVC(right2)
leftContainerView
ViewVC(right1)
ViewVC(MODAL)
•right1,right2,leftは常に
childViewController
•MODALは一時的
childViewControllerとして登
場
•right1/right2はどちらかだけ
view階層にいる
•left/MODALはどちらかだけ
view階層にいる
注意点
• SDK提供のコンテナを子コントローラにする
と面倒が多い。
wantsFullScreenLayoutとか
• viewを貼っただけでviewWillAppearが呼ばれ
る。
iOS 4までで自力で呼んでいた人注意
参考資料
•クラスリファレンスとヘッダファイル
ヘッダの方が詳しい事が多々
•WWDC11のビデオ
•今日のサンプルコード
https://github.com/nakiwo/ViewControllerContainerSample

Más contenido relacionado

Destacado

アプリ広告による収益の最大化
アプリ広告による収益の最大化アプリ広告による収益の最大化
アプリ広告による収益の最大化asakahara
 
Container view活用術とポイントになる部分
Container view活用術とポイントになる部分Container view活用術とポイントになる部分
Container view活用術とポイントになる部分Fumiya Sakai
 
Audio QueueでSin波再生
Audio QueueでSin波再生Audio QueueでSin波再生
Audio QueueでSin波再生Yuichi Fujishige
 
1画面から始めるStoryboard
1画面から始めるStoryboard1画面から始めるStoryboard
1画面から始めるStoryboardYuichi Fujishige
 
30代からのプライベートiOSデベロッパーのとしての軌跡
30代からのプライベートiOSデベロッパーのとしての軌跡30代からのプライベートiOSデベロッパーのとしての軌跡
30代からのプライベートiOSデベロッパーのとしての軌跡Fumiya Sakai
 
ContainerViewとStoryboardとSwift3.0の交響曲(シンフォニー)
ContainerViewとStoryboardとSwift3.0の交響曲(シンフォニー)ContainerViewとStoryboardとSwift3.0の交響曲(シンフォニー)
ContainerViewとStoryboardとSwift3.0の交響曲(シンフォニー)Fumiya Sakai
 
15分でわかるAWSクラウドで オンプレ以上のセキュリティを実現できる理由
15分でわかるAWSクラウドで オンプレ以上のセキュリティを実現できる理由15分でわかるAWSクラウドで オンプレ以上のセキュリティを実現できる理由
15分でわかるAWSクラウドで オンプレ以上のセキュリティを実現できる理由Yasuhiro Horiuchi
 
WordPress using AMIMOTO の Next Step!!
WordPress using AMIMOTO の Next Step!!WordPress using AMIMOTO の Next Step!!
WordPress using AMIMOTO の Next Step!!Yasuhiro Horiuchi
 

Destacado (10)

アプリ広告による収益の最大化
アプリ広告による収益の最大化アプリ広告による収益の最大化
アプリ広告による収益の最大化
 
Container view活用術とポイントになる部分
Container view活用術とポイントになる部分Container view活用術とポイントになる部分
Container view活用術とポイントになる部分
 
iOS 6 のAuto Rotation
iOS 6 のAuto RotationiOS 6 のAuto Rotation
iOS 6 のAuto Rotation
 
CAKeyframeAnimation
CAKeyframeAnimationCAKeyframeAnimation
CAKeyframeAnimation
 
Audio QueueでSin波再生
Audio QueueでSin波再生Audio QueueでSin波再生
Audio QueueでSin波再生
 
1画面から始めるStoryboard
1画面から始めるStoryboard1画面から始めるStoryboard
1画面から始めるStoryboard
 
30代からのプライベートiOSデベロッパーのとしての軌跡
30代からのプライベートiOSデベロッパーのとしての軌跡30代からのプライベートiOSデベロッパーのとしての軌跡
30代からのプライベートiOSデベロッパーのとしての軌跡
 
ContainerViewとStoryboardとSwift3.0の交響曲(シンフォニー)
ContainerViewとStoryboardとSwift3.0の交響曲(シンフォニー)ContainerViewとStoryboardとSwift3.0の交響曲(シンフォニー)
ContainerViewとStoryboardとSwift3.0の交響曲(シンフォニー)
 
15分でわかるAWSクラウドで オンプレ以上のセキュリティを実現できる理由
15分でわかるAWSクラウドで オンプレ以上のセキュリティを実現できる理由15分でわかるAWSクラウドで オンプレ以上のセキュリティを実現できる理由
15分でわかるAWSクラウドで オンプレ以上のセキュリティを実現できる理由
 
WordPress using AMIMOTO の Next Step!!
WordPress using AMIMOTO の Next Step!!WordPress using AMIMOTO の Next Step!!
WordPress using AMIMOTO の Next Step!!
 

Similar a UIViewController のコンテナ機能

BaseViewControllerは作りたくない
BaseViewControllerは作りたくないBaseViewControllerは作りたくない
BaseViewControllerは作りたくない今城 善矩
 
iOSハンズオントレーニング Uikit編
iOSハンズオントレーニング Uikit編iOSハンズオントレーニング Uikit編
iOSハンズオントレーニング Uikit編聡 大久保
 
20121201yidev hirobe iPad miniでRetina
20121201yidev hirobe iPad miniでRetina20121201yidev hirobe iPad miniでRetina
20121201yidev hirobe iPad miniでRetinaKazuya Hirobe
 
WKWebViewとUIWebView
WKWebViewとUIWebViewWKWebViewとUIWebView
WKWebViewとUIWebViewYuki Hirai
 
iOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKitiOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKitShingo Hiraya
 
サーバーからiOSアプリを変更する
サーバーからiOSアプリを変更するサーバーからiOSアプリを変更する
サーバーからiOSアプリを変更するtoyship
 
Mapkitframework io9week
Mapkitframework io9weekMapkitframework io9week
Mapkitframework io9weekYuki Hirai
 
Enhancements with 3D Touch
Enhancements with 3D TouchEnhancements with 3D Touch
Enhancements with 3D TouchSatoshi Ohki
 
よこへな3 15発表資料 最近ViewController をどんな感じで書いているか
よこへな3 15発表資料 最近ViewController をどんな感じで書いているかよこへな3 15発表資料 最近ViewController をどんな感じで書いているか
よこへな3 15発表資料 最近ViewController をどんな感じで書いているかYuichiro Suzuki
 
20120219i phonedeveloperworkshoppublished
20120219i phonedeveloperworkshoppublished20120219i phonedeveloperworkshoppublished
20120219i phonedeveloperworkshoppublishedYoichiro Sakurai
 
ここが変わる!Unity 5のスマホ開発  ~アセットバンドル、ビルド、プラグイン~
ここが変わる!Unity 5のスマホ開発  ~アセットバンドル、ビルド、プラグイン~ここが変わる!Unity 5のスマホ開発  ~アセットバンドル、ビルド、プラグイン~
ここが変わる!Unity 5のスマホ開発  ~アセットバンドル、ビルド、プラグイン~MakotoItoh
 
UIViewController in XIB + IBDesignable
UIViewController in XIB + IBDesignableUIViewController in XIB + IBDesignable
UIViewController in XIB + IBDesignableFukaya Akifumi
 

Similar a UIViewController のコンテナ機能 (13)

BaseViewControllerは作りたくない
BaseViewControllerは作りたくないBaseViewControllerは作りたくない
BaseViewControllerは作りたくない
 
iOSハンズオントレーニング Uikit編
iOSハンズオントレーニング Uikit編iOSハンズオントレーニング Uikit編
iOSハンズオントレーニング Uikit編
 
20121201yidev hirobe iPad miniでRetina
20121201yidev hirobe iPad miniでRetina20121201yidev hirobe iPad miniでRetina
20121201yidev hirobe iPad miniでRetina
 
WKWebViewとUIWebView
WKWebViewとUIWebViewWKWebViewとUIWebView
WKWebViewとUIWebView
 
iOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKitiOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKit
 
サーバーからiOSアプリを変更する
サーバーからiOSアプリを変更するサーバーからiOSアプリを変更する
サーバーからiOSアプリを変更する
 
Swift入門
Swift入門Swift入門
Swift入門
 
Mapkitframework io9week
Mapkitframework io9weekMapkitframework io9week
Mapkitframework io9week
 
Enhancements with 3D Touch
Enhancements with 3D TouchEnhancements with 3D Touch
Enhancements with 3D Touch
 
よこへな3 15発表資料 最近ViewController をどんな感じで書いているか
よこへな3 15発表資料 最近ViewController をどんな感じで書いているかよこへな3 15発表資料 最近ViewController をどんな感じで書いているか
よこへな3 15発表資料 最近ViewController をどんな感じで書いているか
 
20120219i phonedeveloperworkshoppublished
20120219i phonedeveloperworkshoppublished20120219i phonedeveloperworkshoppublished
20120219i phonedeveloperworkshoppublished
 
ここが変わる!Unity 5のスマホ開発  ~アセットバンドル、ビルド、プラグイン~
ここが変わる!Unity 5のスマホ開発  ~アセットバンドル、ビルド、プラグイン~ここが変わる!Unity 5のスマホ開発  ~アセットバンドル、ビルド、プラグイン~
ここが変わる!Unity 5のスマホ開発  ~アセットバンドル、ビルド、プラグイン~
 
UIViewController in XIB + IBDesignable
UIViewController in XIB + IBDesignableUIViewController in XIB + IBDesignable
UIViewController in XIB + IBDesignable
 

Último

TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 

Último (9)

TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

UIViewController のコンテナ機能