从TableView到Swift中的导航控制器

时间:2015-07-30 06:26:22

标签: swift parse-platform uinavigationcontroller

我目前有一个导航控制器,它指向显示我正在聊天的所有人(ChatroomTableViewController)的表视图。一旦我单击表视图中的一条消息,我就会进入实际消息并进入视图控制器(MessageViewController)。

问题:我现在需要一个后退按钮MessageViewController,这意味着我现在需要添加一个导航控制器。这是我当前的代码(没有MessageViewController前面的导航控制器):

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let sb = UIStoryboard(name: "Main", bundle: nil)
    let messagesVC = sb.instantiateViewControllerWithIdentifier("MessageViewController") as! MessagesViewController
    //Some code here
    let room = results?.last as! PFObject
    messagesVC.room = room
}

我想要实例化指向MessageViewController的导航控制器,而不是实例化MessageViewController。

尝试

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let sb = UIStoryboard(name: "Main", bundle: nil)
    let messagesVC = sb.instantiateViewControllerWithIdentifier("NavigationViewController") as! UINavigationController
    //Some code here
    let room = results?.last as! PFObject
    messagesVC.room = room //ERROR! "UINavigationController does not have a member named 'room'"

我该如何解决?

1 个答案:

答案 0 :(得分:1)

您可以这样做:

let navigationVC = sb.instantiateViewControllerWithIdentifier("NavigationViewController") as! UINavigationController
let messagesVC = naviagionVC.viewControllers[0] as! MessagesViewController
let room = results?.last as! PFObject
messagesVC.room = room

这假设您的MessagesViewController是您设计的rootViewController

修改

以下是导航控制器的工作原理:假设您有一个视图控制器层次结构:AViewController - BViewControler - 您希望嵌入导航控制器的CViewController。你所做的是,你创建了一个导航控制器并使AViewController成为rootViewController然后再推出" BViewController以及之后CViewControllerBViewControlerCViewControler都会返回按钮; AViewController并不是因为它是根。

在您的情况下,具有表视图的VC应该是rootViewController。在点击单元格时,你应该按下MessagesViewController,它会有一个后退按钮,点击它会弹出到你当前的视图控制器。