2015-05-03 8 views
7

Beide Methoden erlauben mir, einen neuen View-Controller zu präsentieren (einen durch Aufruf von presentviewcontroller), so dass ich den Unterschied zwischen den beiden nicht verstehe und wann ich sie verwenden sollte.Was ist der Unterschied zwischen der Verwendung von instanziateViewControllerWithIdentifier und dem Ausführen vonseguewidentifier?

+0

instantiateViewControllerWithIdentifier tut, was der Name schon sagt; Es instanziiert einen View-Controller, mehr nicht. Es zeigt * keine * einen View-Controller. – rdelmar

+0

@rdelmar Ich habe Ihren Kommentar angesprochen, um für Sie zu klären. – Michael

Antwort

7

Beide verweisen auf Storyboard-bezogene Identifikatoren. Der Hauptunterschied besteht darin, dass ein Objekt (performSegueWithIdentifer) ein Objekt basierend auf dem Ende eines Segments instanziiert (auf das der Abschnitt verweist), während das andere (instantiateViewControllerWithIdentifier) ein eindeutiges VC basierend auf dem VC-Bezeichner (nicht dem Segment) instanziiert.

Sie können mehrere Segmente mit demselben Bezeichner an verschiedenen Stellen im Storyboard haben, während VCs in einem Storyboard nicht denselben Bezeichner haben können.

6

performSegueWithIdentifer und instantiateViewControllerWithIdentifier beide werden verwendet, um von einem auf einen anderen Viewcontroller Viewcontroller zu bewegen. Aber es gibt so viele Unterschiede ....

  1. Die Kennung des ersten Falles einen Übergang wie Push definiert, Modal, kundenspezifische usw., die verwendet werden, eine bestimmte Art von Übergang von einem VC zu einem anderen VC auszuführen . z.

    self.performSegueWithIdentifier("push", sender: self);` 
    

    wobei "push" eine Kennung eines Push-Segments ist.

    Der Bezeichner des zweiten Falls definiert einen VC wie myViewController, myTableViewController, myNavigationController usw. Die zweite Funktion wird verwendet, um von einem VC im storyBoard zu dem spezifischen VC (mit Bezeichner.) Zu gehen. z.

    var vc = mainStoryboard.instantiateViewControllerWithIdentifier("GameView") as GameViewController; 
    self.presentViewController(VC, animated: true, completion: nil) ; 
    

    wo "GameView" ist die Kennung von GameViewController. Hier wird eine Instanz von GameViewController erstellt und dann wird die Funktion presentViewController aufgerufen, um zum instanziierten vc zu gehen.

  2. Für den ersten Fall mit Hilfe von segue Bezeichner können Sie einen mehr Werte von Variablen an die nächste VC weitergeben. z.

    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. 
        } 
    } 
    

    Diese funcion auch wenn self.performSegueWithIdentifier ("Push", Absender: Selbst-) genannt; wird aufgerufen, um den Wert an GameViewController zu übergeben.

    Aber in der 2. Fall ist es möglich, direkt wie

    var vc = mainStoryboard.instantiateViewControllerWithIdentifier("GameView") as GameViewController; 
    vc.value = self.myvalue; 
    self.presentViewController(VC, animated: true, completion: nil) ; 
    
Verwandte Themen