Ios5 故事板、片段和不同方向的不同视图
我一直在做iOS5的工作,一直在努力处理故事板、片段和调整不同方向的视图。在经历了过去几天苹果公司的帮助之后;我没有找到一个地方来回答问题,我得出了以下结论,我将非常仔细地阐述,我希望有人能告诉我我是否正确: 1-使用故事板并不意味着你必须使用segues(是的,这对初学者来说是一种困惑)Ios5 故事板、片段和不同方向的不同视图,ios5,uinavigationcontroller,storyboard,uiinterfaceorientation,segue,Ios5,Uinavigationcontroller,Storyboard,Uiinterfaceorientation,Segue,我一直在做iOS5的工作,一直在努力处理故事板、片段和调整不同方向的视图。在经历了过去几天苹果公司的帮助之后;我没有找到一个地方来回答问题,我得出了以下结论,我将非常仔细地阐述,我希望有人能告诉我我是否正确: 1-使用故事板并不意味着你必须使用segues(是的,这对初学者来说是一种困惑) 2-您只能在属于导航控制器的VCs之间使用分段 3-另一方面,拥有导航控制器并不一定意味着你必须使用从一个VC到另一个VC的序列(是的!)。因此,如果您试图从一个VC转到另一个VC(无论第一个VC是否属于导航
2-您只能在属于导航控制器的VCs之间使用分段 3-另一方面,拥有导航控制器并不一定意味着你必须使用从一个VC到另一个VC的序列(是的!)。因此,如果您试图从一个VC转到另一个VC(无论第一个VC是否属于导航控制器),您可以执行以下操作: 假设您有一个WhiteVC类和一个YellowVC类,并且在WhiteVC视图上放置了一个按钮(在故事板中,并将通用VC的类更改为WhiteVC),并将其链接到WhiteVC类中的iAction。这是您将在WhiteVC.m中实现的代码,以便能够单击该按钮并显示YellowVC视图:
-(IBAction)GoToYellow
{
YellowViewController *YellowVC=[self.storyboard instantiateViewControllerWithIdentifier:@"myYellowVC"];
[self presentViewController:YellowVC animated:YES completion:nil];
}
要从YellowVC返回到WhiteVC,您需要在YellowVC视图上创建另一个按钮(遵循与上面相同的过程),并使用以下代码:
-(IBAction)ReturnToWhiteVC
{
[self dismissViewControllerAnimated:YES completion:nil];
}
BOOL isShowingLandscapeView;
- (void)awakeFromNib
{
isShowingLandscapeView = NO;
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification
object:nil];
}
- (void)orientationChanged:(NSNotification *)notification
{
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
if (UIDeviceOrientationIsLandscape(deviceOrientation) && !isShowingLandscapeView)
{
[self performSegueWithIdentifier:@"AlternateView" sender:self];
isShowingLandscapeView = YES;
}
else if (UIDeviceOrientationIsPortrait(deviceOrientation) && isShowingLandscapeView)
{
[self dismissViewControllerAnimated:YES completion:nil];// breakpoint shows that this is triggered
isShowingLandscapeView = NO;
}
}
这将关闭黄色VC并返回到白色VC
4-不建议一个VC拥有(实例化)多个视图-例如,对于不同的方向-最好每个视图都有一个单独的VC。不过,让VCs实例化其他VCs作为MVC的一部分是可以的
5-现在所有这些都是因为我正在构建一个应用程序,它有一个导航控制器,但是它的根VC会不同(不同的VC有不同的视图),这取决于它是横向的还是纵向的。因此,我可以通过编程方式(如上面的#3)实例化VCs,这两种方式都很好地工作。或者,如果我想使用segues进行转换,apple帮助文档提供以下代码:
-(IBAction)ReturnToWhiteVC
{
[self dismissViewControllerAnimated:YES completion:nil];
}
BOOL isShowingLandscapeView;
- (void)awakeFromNib
{
isShowingLandscapeView = NO;
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification
object:nil];
}
- (void)orientationChanged:(NSNotification *)notification
{
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
if (UIDeviceOrientationIsLandscape(deviceOrientation) && !isShowingLandscapeView)
{
[self performSegueWithIdentifier:@"AlternateView" sender:self];
isShowingLandscapeView = YES;
}
else if (UIDeviceOrientationIsPortrait(deviceOrientation) && isShowingLandscapeView)
{
[self dismissViewControllerAnimated:YES completion:nil];// breakpoint shows that this is triggered
isShowingLandscapeView = NO;
}
}
上面的代码显然只适用于导航控制器(因为有分段),当方向从纵向变为横向时,它起作用,但当我旋转回纵向时,我最终将横向VC旋转回纵向。我做错了什么
我希望有人能验证/确认这些观点并回答我的问题。
谢谢
KB.首先:segue不仅仅适用于
UINavigationController
,任何UIViewController
都可以执行segue
苹果的文档还说,您必须限制每个UIViewController
支持的方向,您将使用它们来处理方向,也就是说,您必须限制纵向到纵向,横向到横向)。这可以按照以下文件进行:
- 对于iOS 6及更高版本:覆盖
- 对于iOS 5及更早版本:覆盖
您应该能够使其代码适应您自己的视图层次结构。首先:segues不仅仅适用于
UINavigationController
,任何UIViewController
都可以执行segue
苹果的文档还说,您必须限制每个UIViewController
支持的方向,您将使用它们来处理方向,也就是说,您必须限制纵向到纵向,横向到横向)。这可以按照以下文件进行:
- 对于iOS 6及更高版本:覆盖
- 对于iOS 5及更早版本:覆盖
您应该能够根据自己的视图层次结构调整其代码。“2-您只能在属于导航控制器的VCs之间使用分段。”我也有同样的问题。如果我将横向视图控制器上的segue类型更改为“Modal”,则我无法获得您描述的行为,但我丢失了导航条,这不是我想要的,但比“2-您只能在属于导航控制器的VCs之间使用segue”之前的情况要好。我也有同样的问题。如果我将横向视图控制器上的segue类型更改为“Modal”,则我无法获得您描述的行为,但我丢失了导航条,这不是我想要的,但比以前更好