我有一个视图需要在横向和纵向视图中呈现。 我用这个解决方案提供方向: Solution for orientation in Storyboard在容器视图的故事板中的取向不加载segues目标视图控制器
所以现在我的看法是这样的:
选择的观点是的ViewController,有两种观点的观点:第一种是纵向视图,第二个是风景视图。 我隐藏不符合设备方向的视图。
就像在图像中一样,纵向和横向的视图都具有Container视图,通过segue链接到视图控制器。 据我的理解,故事板应该在加载主视图控制器时调用所有的segues。我正在通过prepareForSegue
方法得到Segue电话。
如果纵向视图保留在横向视图之前,则从“纵向视图”中为段落首先调用prepareForSegue
,其中我将目标视图控制器保存在对象中。然后进入“风景视图”的赛段。但是,当调用横向视图segues时,纵向分段的目标视图控制器变为nil
(保存在全局对象中)。
为什么会发生这种情况,以及如何解决此问题,以便所有容器视图都能正确加载。
EDIT
为赛格瑞方法制备: - (无效)prepareForSegue:(UIStoryboardSegue *)赛格瑞发件人:(ID)发送方 { 的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调用一次,如果你在每次传递中设置你的全局变量或属性,其中一些将根据它们被调用的顺序变为零。你可以通过懒惰地设置指针来克服这个问题。 –
@MartinKoles请参阅编辑 –
PrepareForSegue你张贴好看在设置属性方面。在哪里你有'nil' destinationViewController的问题? –