2015-06-03 76 views
0

我很难理解视图控制器的呈现方式以及如何在它们之间快速导航。我有一个联系人列表,当你点击一个联系人时,它会打开相关的会话,但它不会在会话列表中显示任何后退按钮。我的故事板是: 联系人列表 - >导航控制器 - >消息控制器后退按钮不会出现在导航栏中

在联系人列表之前没有导航控制器,因为它使用滑动菜单搞砸了。

这里是我的代码:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "ShowConversationFromSelectedContact" { 

     let nav = segue.destinationViewController as! UINavigationController 
     let cdtvc = nav.topViewController as! MessageViewController 
     cdtvc.currentConversation = openConversation 

    } 

} 

更普遍的,如果你能解释或对控制器工作的方式堆叠任何好处的ressource,以及如何在它们之间进行导航这将是巨大的,我读了一堆文章但目前尚不清楚。

+0

你使用storyBoard还是一切动态生成? –

+0

我使用故事板 –

+0

你可以试试这个:'navigationController.setNavigationBarHidden(false,animated:true)' –

回答

2

重新安排它,所以它是Nav Controller -> Contact list -> Message controller,并使用push segues(如果您使用swift 1.2+,他们被称为Show segues)。

Inside prepareForSegue:除了设置联系人ID(或任何需要传递的数据)到消息控制器之外,您不需要执行任何操作。

编辑:

对于滑动菜单,我建议以下导航模式:

  1. 的故事板ViewController层次理论去

    Nav Controller --root segue--> Contact List VC --show segue--> Message VC

  2. 滑动菜单通常到现在顶级观点。您的Contact List VC是顶级视图。既然它也是VC的根,你可以使用self.navigationItem.leftBarButtonItem来指定一个按钮来显示你的滑动菜单。

+0

那么正如我所说的问题是我不能把导航控制器在联系人列表之前或它打破了我的滑动菜单的显示方式。任何其他方式? –

+0

你遇到的问题是你没有将消息控制器推向堆栈,所以你不能“回去”..因为没有“返回”去。您的消息控制器是根视图控制器。正因为如此,我**强烈建议您重新设计滑动菜单。 –

+0

另一种解决方案是你目前的视图控制器,并以编程方式解雇他们,但这将100%保证给不必要的头痛。 –