Showing UINavigationController in a Modal segue (ViewController)?
我已经在这个问题上停留了2个多星期!在我的项目中,我有1个要同时启用横向和纵向模式的ViewController(幻灯片)。所有其他控制器/视图(幻灯片)的其余部分我仅希望启用纵向模式。
棘手的部分是,我所指的" ViewController"同时连接到NavigationControllers和TabBarControllers。请参阅下面的方案,其中要同时启用横向/纵向的ViewController的名称为:ReferredViewController。
TabBarController ----> NavigationController ----> FristViewController-(推送事件)-> ReferredViewController
到目前为止,我已经尝试为NavigationControllers和TabBarControllers进行分类。但是由于我的NavigationControllers和TabBarControllers放置在项目的最开始,所以这将为整个项目设置规则。我的ReferredViewController放置在项目" storyboard"的末尾或中间。我试图通过代码为单个ReferredViewController设置规则,但没有成功。
我最好的办法是将FirstViewController和ReferredViewController之间的事件从" push"更改为" modal"。然后,ReferredViewController可以同时旋转人像/风景,并且项目的其余部分被锁定为人像。但是,您可能知道所有导航(NavigationBar)都将丢失,并且用户将被卡在那张幻灯片上。
因此,我尝试在ReferredViewController.m文件中使用以下代码示例启用NavigationBar:
1 2 3 4 5 6 7 | ShowTaskViewController *detailViewController = [[ShowTaskViewController alloc] init]; UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:detailViewController]; navController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; [self.navigationController presentModalViewController:navController animated:YES completion:nil]; [navController release]; [detailViewController release]; |
但是官方没有任何反应,我又回到正题了:O。 FML!
在此行中:
1 2 3 | [self.navigationController presentModalViewController:navController animated:YES completion:nil]; |
您正在混淆两个UIViewController实例方法:
1 2 3 4 5 6 | - (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion - (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated |
第一个方法现已成为标准,第二个方法已在ios6中弃用。
当前呈现的视图控制器应该是self(ReferredViewController),而不是self的navigationController。
您显示的视图控制器可以自行关闭,因此
1 2 | [[self presentingViewController] dismissViewControllerAnimated:YES completion:(void (^)(void))completion]; |
但是请看一下fibnochi的答案,这可能是您获得结果的一种更好的方法。
您必须克服UITaBarController,因为它是基础视图控制器。我已经为我的导航控制器完成了此操作。告诉我是否有帮助。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | @interface UINavigationController (Autorotation) - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation; - (BOOL) shouldAutorotate; - (NSUInteger) supportedInterfaceOrientations; @end @implementation UINavigationController (Autorotation) - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{ if ([self.visibleViewController isKindOfClass:[MWPhotoBrowser class]] || [self.visibleViewController isKindOfClass:[ZoomPictureViewController class]]) { return YES; } return (toInterfaceOrientation == UIInterfaceOrientationPortrait); } -(BOOL) shouldAutorotate{ return YES; } -(NSUInteger) supportedInterfaceOrientations{ if ([self.visibleViewController isKindOfClass:[MWPhotoBrowser class]] || [self.visibleViewController isKindOfClass:[ZoomPictureViewController class]]) { return UIInterfaceOrientationMaskAll; } return UIInterfaceOrientationMaskPortrait; } |