传递UInavigationController并将变量传递给新的viewController的最佳方法是什么。我知道如何做一个或另一个但不能同时做两个。提前谢谢
这是我目前的代码
func(){
let vc = storyboard?.instantiateViewControllerWithIdentifier("messagesViewController") as! UINavigationController
let posts = self.postList[indexPath.row]
//this is the var that i want to past
//vc.previousViewMessageId = posts.postKey
self.presentViewController(vc, animated: true, completion: nil)
}
答案 0 :(得分:0)
要将值传递给导航控制器的根视图控制器,您可以访问viewControllers[0]
并将其强制转换为消息视图控制器(具有previousViewMessageId
属性的控制器)的类:
func () {
let messagesNC = storyboard?.instantiateViewControllerWithIdentifier("messagesViewController") as! UINavigationController
let messagesVC = messagesNC.viewControllers.first as! MessagesViewController
messagesVC.previousViewMessageId = postList[indexPath.row].postKey
presentViewController(messagesNC, animated: true, completion: nil)
}
答案 1 :(得分:0)
如果我理解正确,你有一个可以呈现第二个VC的视图控制器。此VC嵌入在UINavigationController
中。您不知道该怎么做,是将数据从第一个VC传递到导航控制器,然后传递到第二个VC。
这是一个强力解决方案。它不漂亮,但它无论如何都有效。
制作自己的UINavigationController
子类:
class DataPasserController: UINavigationController {
var previousViewMessageId: SomeType?
override func viewDidLoad() {
if let vc = self.topViewController as? YourSecondViewController {
vc.previousViewMessageId = self.previousViewMessageId
}
}
}
现在,您可以在故事板中添加导航控制器,将其类设置为DataPasserController
,并将第二个VC作为其根视图控制器连接到它。
现在假设您通过调用DataPasserController
获得了instantiateViewControllerWithIdentifier
的实例,您可以这样做:
yourDataPasserControllerInstance.previousViewMessageId = posts.postKey
并呈现实例!
答案 2 :(得分:0)
你所拥有的只是呈现一个视图控制器......你正在跳过导航控制器。
您需要做的是在导航控制器中显示新的视图控制器。完成后,它将正确显示。您还可以在创建vc
变量后传递变量。
这在导航控制器中提供了新的viewController(vc
)......
self.navigationController?.pushViewController(vc, animated: false)
这在新的viewController中设置变量(vc
)(你是对的)
vc.previousViewMessageId = posts.postKey
如此完整:
func(){
let vc = storyboard?.instantiateViewControllerWithIdentifier("messagesViewController") as! MessagesViewController
let posts = self.postList[indexPath.row]
//this is the var that i want to past
vc.previousViewMessageId = posts.postKey
navigationController?.pushViewController(vc, animated: false)
}
PS。虽然不是问题的一部分,但我觉得我仍然应该提到...... self
这个词的使用应该只是必要的。换句话说,在不需要时不要使用它。例如self.postList[indexPath.row]
:)
https://github.com/raywenderlich/swift-style-guide#use-of-self