0

我有一个应用程序,它使用 JASidePanel 来显示类似 facebook 的侧边菜单。它工作得很好,我可以展示我的左右面板。但是我需要左右面板是通用的,即如果我从当前的中心面板视图控制器切换到一个新的,比如细节视图控制器,我仍然需要能够显示我的左右面板。

考虑使用 MainVC 和 DetailVC 的场景

场景一:

[left]-[center]-[right]
          |
       [MainVC]

场景 2:转到下一个视图控制器时

       [MainVC]

[left]-[center]-[right]
          |
      [DetailVC]

场景 3:转到另一个视图控制器时

       [MainVC]
      [DetailVC]

[left]-[center]-[right]
          |
    [MoreDetailVC]

DetailVC 被推送并“放在”中央面板的顶部,而 MainVC 仍然在堆栈的某个位置。我需要转场和推动,因为

  1. 我使用故事板
  2. 在其他视图控制器中,我调用 popToRootViewController 并且我需要 MainVC 作为 rootViewController

我尝试过从 MainVC 到 DetailVC 的转场

[self performSegueWithIdentifier...];

在 DetailVC 中,我将中心面板设置为 self ,如下所示:

//in view will appear
sidePanelViewController.centerPanel = self;

这会为我的应用程序产生黑屏。我认为发生这种情况是因为中心面板的 setter 方法也加载了视图控制器,但视图已经加载,所以它有点像双倍的 segue。如果我删除上面的行,detailVC 显示良好,但我无法访问左右面板。

我看过这个这个这个,但没有给出答案。我认为 JASidePanel 可能无法做到这一点,我正在考虑使用其他资源。

编辑: 我没有在 MainVC 上执行 segue,而是尝试直接在此处设置中心面板,如下所示:

sidePanelViewController.centerPanel = [self.storyboard instantiateVCWithIdentifier:@"detailVC"];

它有效,它不是通过segue进入DetailVC,所以没有动画,但可以访问左右面板。问题是我无法使用 popToRootViewController 返回 mainVC。(我需要使用 popToRootViewController 立即返回到 mainVC,因为可以有很多转换,就像一个主页按钮)

4

1 回答 1

4

我没有对下一个中心视图控制器执行转场,而是删除了所有转场并使用:

sidePanelViewController.centerPanel = 
    [self.storyboard instantiateVCWithIdentifier:@"detailVC"];

这改变了中心面板但没有推动动画,所以这有点可悲。然后我将主视图控制器的指针保存在可访问的全局位置,比如 App Delegate。然后当我按下主页按钮时,我像这样回到家:

sidePanelViewController.centerPanel = appDelegate.mainViewControllerPointer;

这会将我返回到我离开它的状态的主视图控制器。如果我用 [self.storyboard instantiate...] 实例化一个新的视图控制器,一个主视图控制器被放置为中心面板,没有一些表单数据,我留下了它,这不是我想要的

于 2013-10-21T06:13:09.917 回答