ios - 在模态转场(ViewController)中显示 UINavigationController?

标签 ios rotation modal-dialog modalviewcontroller

我现在已经在这个问题上停留了 2 周多了!在我的项目中,我有 1 个 ViewController(slide) 我想同时启用横向和纵向模式。其余所有 Controller / View (幻灯片)我只想启用纵向模式。

棘手的部分是,我所指的“ViewController”连接到 NavigationControllers 和 TabBarControllers。请参阅下面的方案,其中我想要同时启用横向/纵向的 ViewController 被命名为:ReferredViewController。

TabBarController ----> NavigationController ----> FristViewController --(推送事件)--> ReferredViewController

到目前为止,我已尝试为 NavigationControllers 和 TabBarControllers 创建一个CATEGORY。但是由于我的 NavigationControllers 和 TabBarControllers 被放置在项目的最开始,这将为整个项目设置规则。我的 ReferredViewController 位于项目“ Storyboard”的末尾或中间。我曾尝试通过代码为单个 ReferredViewController 设置规则,但没有成功。

我最好的办法是将 FirstViewController 和 ReferredViewController 之间的事件从“push”更改为“modal”。 ReferredViewController 然后可以旋转纵向/横向,项目的其余部分被锁定在纵向。但是,正如您可能知道的那样,所有导航 (NavigationBar) 都将丢失,并且用户将卡在单张幻灯片上。

所以我尝试使用 ReferredViewController.m 文件中的以下代码示例启用 NavigationBar:

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];

但是什么也没发生,我又回到原点了:哦。卧槽!

最佳答案

在这一行中:

[self.navigationController presentModalViewController:navController 
                                             animated:YES  
                                           completion:nil];

您正在混淆两个 UIViewController 实例方法:

- (void)presentViewController:(UIViewController *)viewControllerToPresent 
                     animated:(BOOL)flag 
                   completion:(void (^)(void))completion

- (void)presentModalViewController:(UIViewController *)modalViewController 
                          animated:(BOOL)animated

其中第一个现在是标准方法,第二个方法在 ios6 中已弃用。

此外,呈现 View Controller 应该是自己(ReferredViewController),而不是自己的 navigationController。

您呈现的 View Controller 可以因此自行关闭

 [[self presentingViewController] dismissViewControllerAnimated:YES 
                                                     completion:(void (^)(void))completion];

但看看 fibnochi 的答案,它可能是您实现结果的更好方法。

关于ios - 在模态转场(ViewController)中显示 UINavigationController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13934131/

相关文章:

ios - 来自 NSKeyedUnarchiver 和 Any 的未归档数据的转换失败?输入 OIDAuthState

ios - 使用带有 FlowLayout 的 UICollectionView 的标签组件?

c# - 直到按下 alt 键才显示模态通用对话框

ios - 如何获取每个地理位置的照片?

ios - 使用 AutoLayout 设计简单的应用程序

c# - 获取子对象在父对象中的全局位置

iOS 6 - 某些 View 的导航 Controller 横向旋转,而其他 View 仅纵向

iPhone如何在旋转设备时正确调整 View 大小

jquery - 如何禁用 fancybox 窗口背景中的操作

javascript - Angular 路由和 Bootstrap - 在不更改页面内容的情况下显示模式对话框?