【发布时间】:2014-04-25 20:53:47
【问题描述】:
我有一个需要在横向和纵向视图中呈现的视图。 我使用此解决方案来提供方向: Solution for orientation in Storyboard
所以现在我的看法是这样的:
选定的视图是 ViewController 的视图,它有两个视图:第一个是纵向视图,第二个是横向视图。 我隐藏了不符合设备方向的视图。
如图所示,Portrait 和 Landscape 视图都有 Container 视图,通过 segue 链接到视图控制器。
据我了解,Storyboard 应该在加载主视图控制器时调用所有的 segue。我正在prepareForSegue 方法上接到 Segue 电话。
如果纵向视图保留在横向视图之前,则首先调用 prepareForSegue 以从“纵向视图”中进行转场,我将目标 viewController 保存在一个对象中。然后是“风景”的segues。但是当调用 Landscape 视图 segues 时,Portrait Segues 的目标 viewController 变为 nil(保存在全局对象中)。
为什么会发生这种情况,我该如何解决这个问题,以便正确加载所有容器视图。
编辑
为 segue 方法做准备: - (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { NSString * segueName = segue.identifier;
if ([segueName isEqualToString: @"ChartEmbedSegue"])
{
self.chartViewController = (ChartViewController *) [segue destinationViewController];
self.chartViewController.dataSource = [[ServiceManager sharedInstance] dataSource];
self.chartViewController.view.frame = self.chartContainerView.bounds;
}
else if ([segueName isEqualToString: @"LandscapeChartEmbedSegue"])
{
self.landscapeChartViewController = (ChartViewController *) [segue destinationViewController];
self.landscapeChartViewController.dataSource = [[ServiceManager sharedInstance] dataSource];
self.landscapeChartViewController.view.frame = self.chartContainerView.bounds;
}
else if ([segueName isEqualToString: @"SummaryControllerEmbedSegue"])
{
self.summaryViewController = (SummaryViewController *) [segue destinationViewController];
self.summaryViewController.data = self.data;
self.summaryViewController.view.frame = self.summaryView.bounds;
}
else if ([segueName isEqualToString: @"LandscapeSummaryControllerEmbedSegue"])
{
self.landscapeSummaryViewController = (SummaryViewController *) [segue destinationViewController];
self.landscapeSummaryViewController.data = self.data;
self.landscapeSummaryViewController.view.frame = self.landscapeSummaryView.bounds;
}
}
【问题讨论】:
-
展示你的segue准备。 PrepareForSegue 为每个 segue 调用一次,如果您在每次传递中设置全局变量或属性,其中一些将根据调用顺序变为 nil。你可以通过懒惰地设置指针来克服这个问题。
-
@MartinKoles 请查看编辑
-
PrepareForSegue 您发布的设置属性看起来不错。
nildestinationViewController 到底哪里有问题?
标签: ios iphone storyboard uistoryboard segue