标题很清楚地说明了这个问题。但这里有一些上下文可能会使事情更清楚:
我正在开发一个电子邮件客户端应用程序,该应用程序将 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 我希望它包含在由导航控制器作为父/控制的导航控制器中,并且我希望它上下滑动......这意味着它必须也是ECSlidingViewController
.
此外,假设 VC 可以有多个父级.. 在上述示例的上下文中.. 我应该在视图层次结构中的哪个位置添加该父级?我应该将它添加为 UINavigationController 的子项吗?这是否与最佳实践一致(假设有一些)?