这两种方法都允许我提供一个新的视图控制器(一个通过调用presentviewcontroller),所以我不明白两者之间的区别以及何时应该使用它们.
他们都参考故事板相关的标识符.主要区别是one(performSegueWithIdentifer)基于segue的末端(segue指向的地方)实例化对象,而另一个(instantiateViewControllerWithIdentifier)基于VC的标识符(而不是segue)实例化唯一的VC.
您可以在故事板中的不同位置具有多个具有相同标识符的segue,而故事板中的VC不能具有相同的标识符.
小智 8
performSegueWithIdentifer和instantiateViewControllerWithIdentifier都用于从一个viewController移动到另一个viewController.但是存在很多差异......
第一种情况的标识符定义了像push,modal,custom等的segue,它们用于执行从一个VC到另一个VC的特定类型的转换.例如.
self.performSegueWithIdentifier("push", sender: self);`
Run Code Online (Sandbox Code Playgroud)
其中"推"是推送segue的标识符.
第二种情况的标识符定义了一个VC,如myViewController,myTableViewController,myNavigationController等.第二个函数用于从storyBoard中的VC转到特定的VC(带标识符.).例如.
var vc = mainStoryboard.instantiateViewControllerWithIdentifier("GameView") as GameViewController;
self.presentViewController(VC, animated: true, completion: nil) ;
Run Code Online (Sandbox Code Playgroud)
其中"GameView"是GameViewController的标识符.这里创建了一个GameViewController实例,然后调用函数presentViewController转到实例化的vc.
对于第一种情况,在segue标识符的帮助下,你可以传递一个更多的变量值到下一个VC.例如.
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!)
{
if (segue.identifier == "push")
{
let game = segue.destinationViewController as GameViewController
game.value = self.myvalue // *value* is an Int variable of GameViewController class and *myvalue* is an Int variable of recent VC class.
}
}
Run Code Online (Sandbox Code Playgroud)
当self.performSegueWithIdentifier("push",sender:self)时,也会调用此函数; 被调用以将值传递给GameViewController.
但在第二种情况下可能直接喜欢,
var vc = mainStoryboard.instantiateViewControllerWithIdentifier("GameView") as GameViewController;
vc.value = self.myvalue;
self.presentViewController(VC, animated: true, completion: nil) ;
Run Code Online (Sandbox Code Playgroud)