我有一个使用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,因为
我尝试过从MainVC到DetailVC执行segue
[self performSegueWithIdentifier...];
在DetailVC我将中心面板设置为自我:
//in view will appear
sidePanelViewController.centerPanel = self;
这会为我的应用生成黑屏。我认为这是因为中心面板的setter方法也加载了视图控制器,但视图已经被加载,所以它有点像segue的两倍。 如果我删除上面的行,detailVC显示良好,但我无法访问左右面板。
我看过this, this和 this但是 答案尚未给出。 我认为这可能不适用于JASidePanel,我正在考虑使用其他资源。
修改: 我没有在MainVC上执行segue,而是尝试直接设置中心面板,如下所示:
sidePanelViewController.centerPanel = [self.storyboard instantiateVCWithIdentifier:@"detailVC"];
它有效,它不是通过segue进入DetailVC所以没有动画,但可以访问左右面板。问题是我无法使用popToRootViewController返回mainVC。 (我需要使用popToRootViewController在瞬间返回mainVC,因为可以有很多转换,它就像一个主页按钮)
答案 0 :(得分:4)
我没有对下一个中心视图控制器执行segue,而是删除了所有的segue并使用了:
sidePanelViewController.centerPanel =
[self.storyboard instantiateVCWithIdentifier:@"detailVC"];
这改变了中心面板,但没有推动动画,所以有点难过。然后,我将主视图控制器的指针保存在可访问全局的位置,比如App Delegate。然后当我按下主页按钮时,我会这样回家:
sidePanelViewController.centerPanel = appDelegate.mainViewControllerPointer;
这使我返回到我离开状态的主视图控制器。如果我使用[self.storyboard instantiate ...]实例化一个新的视图控制器,主视图控制器将被放置为中心面板而没有我留下的一些表单数据,这不是我想要的