【问题标题】:Orientation in storyboard with container views not loading segues destination view controller故事板中的方向与容器视图未加载 segues 目标视图控制器
【发布时间】: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


【解决方案1】:

糟糕..糟糕,发布此问题后,我意识到,我没有设置重要属性,因此没有数据传入。

有时候,只要重新思考问题就可以解决问题。

版主:我应该删除问题吗?

@MartinKoles 感谢您的支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 2013-02-01
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多