到目前为止,我还没有找到与我的情况相符的任何内容......
仅供参考,我正在使用故事板为iOS 5开发。
我有标签栏控制器,其中包含 2个视图(我们称之为标签1和标签2)。我还有一个单独的横向视图,没有标签栏,在应用程序使用期间设备每次旋转时都会使用该视图。我使用在shouldAutorotateToInterfaceOrientation
中手动启动的segue来切换到此视图。我还在横向视图中使用NSString来了解我来自哪个标签,当我回到肖像时再回到正确的标签。到目前为止,这很好。我可以按照我想要的方式进入和离开风景模式。
我的问题是:
当我以纵向方式启动应用程序时,我会看到标签栏。如果我去景观,它就会消失。这很好,这就是我在故事板中所做的。但当我回到肖像时,标签栏不会回来!这就是问题所在。
编辑:调用轮换的代码
我停止使用shouldAutorotateToInterfaceOrientation
进行轮播,因为它与自定义segues冲突。标签栏的问题在此之前,所以这不是问题。我改为使用didRotate
。
以下是来自FirstViewController.m
的代码(SecondViewController.m
中的相同代码,更改了我的segue标识符):
-(void)didRotate:(NSNotification *)notification
{
UIInterfaceOrientation newOrientation = [[UIDevice currentDevice] orientation];
if ((newOrientation == UIInterfaceOrientationLandscapeLeft || newOrientation == UIInterfaceOrientationLandscapeRight))
{
[self performSegueWithIdentifier: @"Page1ToLandscapeSegue" sender: self];
}
}
来自LandscapeViewController.m
(previousView
是一个NSString,在去景观之前设置,所以我知道我来自哪个视图):
-(void)didRotate:(NSNotification *)notification
{
UIInterfaceOrientation newOrientation = [[UIDevice currentDevice] orientation];
if (newOrientation == UIInterfaceOrientationPortrait)
{
if ([previousView isEqualToString: @"View1"]) {
[self performSegueWithIdentifier: @"LandscapeToPage1Segue"
sender: self];
}
else if ([previousView isEqualToString: @"View2"]) {
[self performSegueWithIdentifier: @"LandscapeToPage2Segue"
sender: self];
}
}
}
答案 0 :(得分:3)
查看您的评论我认为您的标签栏正在消失,因为您正在从未嵌入标签栏控制器的视图控制器(这是您的横向视图视图控制器)中进行搜索,我建议以下:
1)设置segues以回到上一个视图似乎很复杂,更不用说你创建了更多的视图/控制器并将它们添加到堆栈中,因此丢弃了返回到原始视图的segue。
2)使横向视图的segues成为模态,这样当你使用它时就不会显示标签栏,如果使用push它将嵌入标签栏控制器。
3)由于横向视图是模态视图,只需在横向视图控制器的旋转代码中调用此方法:
[[self presentingViewController] dismissModalViewControllerAnimated:YES];
这会将视图从堆栈中推出并返回到它来自的视图。