2012-03-09 10 views
1

親ビューと子ビューの間にUIViewを共有する方法はありませんか?複数のUIViewController間でUIViewをバックグラウンドで点滅させずに共有

親ビューと子UIViewControllerの間で共有される、 'マストヘッド'と見なされるUIViewControllerとそれに対応するUIViewがあります。

子供のUIViewControllerが作成され、表示階層にプッシュされると(私は 'UINavigationController'でそれらを使用しています)、画像が表示されます。私が見ているのは、マストヘッドビューがサブビューとして追加される前のプレースホルダの背景領域です。

各画面で独自のマストヘッドビューを作成することを考えましたが、アプリのビューの大半はこのマストヘッドを共有します。したがって、すべてのコンテンツの変更を管理することは複雑に思えましたが、私は1つのインスタンスを持つことでより簡単なルートをとろうとしています。

AppDelegate作品:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Other prep work, including setup of self.window 
    UIViewController *vc = [[ParentViewController alloc] initWithNibName:nil 
           bundle:[NSBundle mainBundle]]; 

    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:vc];   

    self.window.rootViewController = navController; 
} 

親のUIViewControllerの実装:

@interface ParentViewController : UIViewController {} 

@implementation ParentViewController() 
- (void)viewDidLoad 
{ 
    // The shared controller and its view has already been created and initialized. 

    // Adding the masthead to my view 
    [self.view addSubview:self.mastheadController.view]; 
    [super viewDidLoad]; 
} 
- (void)showChildController 
{ 
    DetailViewController *detailController = [[DetailViewController alloc] initWithNibName:nil 
          bundle:[NSBundle mainBundle]                     
          withMastheadController:self.mastheadController]; 

    [self.navigationController pushViewController:detailController animated:YES]; 
    detailController = nil; 
} 

ここで子供のUIViewControllerの実装です:

@interface DetailViewController : UIViewController {} 

@implementation DetailViewController() 
- (void)willMoveToParentViewController:(UIViewController *)parent 
{ 
    // Since this method is invoked before our viewDidLoad and the 
    // parent's viewWillDisappear, remove shared view from parent view 
    // stack. 
    [self.mastheadController.view removeFromSuperview]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Adding the shared masthead controller view to our view 
    [self.view addSubview:self.mastheadController.view];       
} 

私はと思ったので、私はwillMoveToParentViewControllerを使用している理由は、 'viewWillDisappear'が呼び出されるまで待つとParentViewControllerの場合、mastheadViewが子ビュー階層に挿入されるのに十分な時間がかかりませんでした。

これは、ビューには、イベントが発生消える/表示される順番についての私の理解である:すべてのヘルプ

child:willMoveToParentViewController (parent will be null upon dismiss) 
child:viewDidLoad 
parent:viewWillDisappear 
child:viewWillAppear 

をいただければ幸いです。

答えて

1

私はこれに違ったアプローチをします。 navControllerのビューにビューを追加して、それを見たくないときに削除してみましょう。

+0

良い提案。各UIViewControllerのビュー境界がマストヘッドのビュー境界と重ならないようにしますか? –

+0

ええ、私はそれをやったことはありませんが、マストヘッドを見えるように(重複しないように)他のUIViewControllerのビューのサイズを変更できるはずです。 – Ned

関連する問題