我目前有一个导航控制器,它指向显示我正在聊天的所有人(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'"
我该如何解决?
答案 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
以及之后CViewController
。 BViewControler
和CViewControler
都会返回按钮; AViewController
并不是因为它是根。
在您的情况下,具有表视图的VC应该是rootViewController
。在点击单元格时,你应该按下MessagesViewController
,它会有一个后退按钮,点击它会弹出到你当前的视图控制器。