タイトルは質問を非常に明確に設定します..しかし、これは潜在的に物事をより明確にするための少しの文脈です:
UINavigationControllerをルートVCとしてメインウィンドウに接続する電子メールクライアントアプリに取り組んでいます(UIの仕組みの下にUIの階層が表示されます)。
HomeViewController *homeController = [[HomeViewController alloc] initWithNibName:@"HomeView" bundle:nil];
UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:homeController];
[self.window addSubview:navController.view];
後で、ビューコントローラをナビゲーションコントローラにプッシュします。つまり、フォルダビュー->メールボックスビュー->メールビューなどです。
[self.navigationController pushViewController:someController animated:YES];
メールビューにスライディングビューコントローラ効果を実装したいと思います。
問題は、スライディングビューコントローラーエフェクトがカスタムコンテナビューコントローラーとして実装されていることです。前提条件は、ウィンドウルートビューコントローラーである包含ビューコントローラー(それを呼びましょうECSlidingViewController
)を起動することによってアプリを開始することです。次に、トップビューコントローラー(つまり、表示される最初のビューコントローラー)をアプリに追加します。
ECSlidingViewController *slidingViewController = (ECSlidingViewController *)self.window.rootViewController;
slidingViewController.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstTop"];
次に、トップビューコントローラーの下に表示されるはずのビューコントローラーを接続します(slidingViewController
この例では、常にコントローラーのみが含まれています)。
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if (![self.slidingViewController.underLeftViewController isKindOfClass:[MenuViewController class]]) {
self.slidingViewController.underLeftViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Menu"];
}
[self.view addGestureRecognizer:self.slidingViewController.panGesture];
[self.slidingViewController setAnchorRightRevealAmount:280.0f];
}
私が理解しようとしているのは..私のメールビューが技術的にはの子ビューコントローラであるUINavigationController
ことを考えると、このいわゆる子になることもできECSlidingViewController
ますか?b / c navコントローラーによってペアレント化/制御されるナビゲーションコントローラーに含まれるようにし、上下にスライドさせたい。これは、の子でもある必要があることを意味しますECSlidingViewController
。
さらに、VCが複数の親を持つことができると仮定すると、上記の例のコンテキストでは、ビュー階層のどこにその親を追加する必要がありますか?UINavigationControllerの子として追加する必要がありますか?それはベストプラクティスと一致しますか(いくつかあると仮定して)?