親ビューと子ビューの間に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
をいただければ幸いです。
良い提案。各UIViewControllerのビュー境界がマストヘッドのビュー境界と重ならないようにしますか? –
ええ、私はそれをやったことはありませんが、マストヘッドを見えるように(重複しないように)他のUIViewControllerのビューのサイズを変更できるはずです。 – Ned