iOS:如何在情节提要中在横向和纵向视图之间切换?
Posted
技术标签:
【中文标题】iOS:如何在情节提要中在横向和纵向视图之间切换?【英文标题】:iOS: how to switch between landscape and portrait view in storyboard? 【发布时间】:2012-09-13 07:45:00 【问题描述】:在我的通用应用程序中,我在开始时有一个主细节。在 iPad 上,它仅显示为拆分视图,当我更改界面方向时,自动调整大小可以正常工作。但在 iPhone 上,这在我的详细视图中还不够好。所以我想为我的 DetailViewController 提供两个不同的视图,它们应该具有完全相同的功能,但我无法真正让它正常工作。我尝试使用两个视图控制器,但这并没有真正完成这项工作。顺便说一句,我正在使用故事板。
我认为我已经通过向 DetailViewController 添加两个视图找到了解决方案。然后我只需检查当前方向并像这样设置最近的视图:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
Video *currentVideo = [[self.xmlParser videos] objectAtIndex:indexPath.row];
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
[self.detailViewController setDetailItem:currentVideo];
else
if (!self.detailViewController)
DetailViewController *nextController = [self.storyboard instantiateViewControllerWithIdentifier:@"Detail"];
if ([UIDevice currentDevice].orientation == UIDeviceOrientationPortrait)
[nextController setView:nextController.portraitView];
else
[nextController setView:nextController.landscapeView];
[nextController setDetailItem:currentVideo];
[self.navigationController pushViewController:nextController animated:YES];
这就像它应该的那样工作,但现在我面临另一个问题。这两个视图包含完全相同的插座,但我只能将其中任何一个的插座连接到我的 DetailViewController 类。因此,在其中一个方向上,我无法正确查看我的内容,或者我必须将所有内容编码两次,这正是我想要避免的。
有什么想法可以解决这个问题吗?
提前致谢
【问题讨论】:
【参考方案1】:您可以尝试将容器视图中的两个视图添加到情节提要中的视图控制器。尺寸一个是肖像,另一个是风景。将所需的所有控件添加到所需的任何视图。当方向改变时 - 隐藏一个并显示另一个。
【讨论】:
我试过了,但我不能真正让它工作。我是否必须保留最初加载的第三个视图,然后根据方向添加我的自定义视图? 您可以将它们都放入容器视图中,或者将其中一个绑定到控制器上的“视图”插座和“人像视图”插座(另一个视图将绑定到“景观视图” ' 在这种情况下)。如果您不使用容器视图,则必须在方向更改时切换绑定到控制器“视图”出口的视图,而不是隐藏/显示视图。 感谢您的快速回答,它帮助我继续前进。但现在我面临着新的问题。你能检查我编辑的问题吗? 对于两个视图-两组网点的问题,需要同样的方法。如果有问题的插座位于控制器上并引用视图的内容,请创建一个您将在所有逻辑中引用的通用插座,以及两个用于纵向/横向模式的专用插座。在方向更改时切换哪一个专用插座绑定到通用插座。至于驻留在横向/纵向视图本身的插座 - 它们可以同时绑定到同一个控制器,因为只有一个视图驻留在视图堆栈上(接收事件)。以上是关于iOS:如何在情节提要中在横向和纵向视图之间切换?的主要内容,如果未能解决你的问题,请参考以下文章