1

我现在已经被这个问题困住了超过 2 周!在我的项目中,我有 1 个 ViewController(slide) 我想同时启用横向和纵向。其余的所有控制器/视图(幻灯片)我只想启用纵向模式。

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

TabBarController ----> NavigationController ----> FristViewController --(push event)--> ReferredViewController

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

我最好的方法是将 FirstViewController 和 ReferredViewController 之间的事件从“推送”更改为“模态”。然后,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];

但是ofc什么也没发生,我又回到了原点:O。FML!

4

2 回答 2

1

在这一行:

[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 中已弃用。

此外,呈现视图控制器应该是自我(ReferredViewController),而不是自我的导航控制器。

您呈现的视图控制器可以自行关闭

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

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

于 2012-12-18T14:10:14.680 回答
0

你必须覆盖 UITaBarController 因为它是你的基本视图控制器。我已经为我的导航控制器做了这个。告诉我这是否有帮助。

@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;
 }
于 2012-12-18T13:43:53.970 回答