我已经被困在这个问题上超过2周了!在我的项目中,我有一个单一的ViewController(幻灯片)我想要启用横向和纵向。其余的所有控制器/视图(幻灯片)我只想启用纵向模式。
棘手的部分是,我所指的“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];
但是没有任何事情发生,我又回到了原点:O。 FML!
答案 0 :(得分: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中已弃用。
此外,呈现视图控制器应该是self(ReferredViewController),而不是self的navigationController。
您呈现的视图控制器可以解雇自己
[[self presentingViewController] dismissViewControllerAnimated:YES
completion:(void (^)(void))completion];
但是看一下fibnochi的回答,这可能是你获得结果的更好方法。
答案 1 :(得分:0)
你必须覆盖UITaBbarController,因为它是你的基本视图控制器。我已经为我的导航控制器做了这个。告诉我这是否有帮助。
@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;
}