如何使用可互换的中心面板实现JASidePanel?

时间:2013-09-24 05:40:52

标签: iphone ios objective-c

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

使用MainVC和DetailVC

考虑这种情况

场景1:

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

场景2:进入下一个视图控制器

       [MainVC]

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

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

       [MainVC]
      [DetailVC]

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

当MainVC仍在堆栈的某个位置时,DetailVC被推动并“放在中心面板的顶部”。我需要segues和push,因为

  1. 我使用故事板
  2. 在其他视图控制器中,我调用popToRootViewController,我需要将MainVC作为rootViewController
  3. 我尝试过从MainVC到DetailVC执行segue

    [self performSegueWithIdentifier...];
    

    在DetailVC我将中心面板设置为自我:

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

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

    我看过thisthisthis但是 答案尚未给出。 我认为这可能不适用于JASidePanel,我正在考虑使用其他资源。

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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

sidePanelViewController.centerPanel = appDelegate.mainViewControllerPointer;

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