2015-05-03 12 views
7

Obie metody pozwalają mi przedstawić nowy kontroler widoku (jeden przez wywołanie presentviewcontroller), więc nie rozumiem różnicy między tymi dwoma i kiedy powinienem ich używać.Jaka jest różnica między używaniem obiektu instantiateViewControllerWithIdentifier a wykonywaniem identyfikatora?

+0

instantiateViewControllerWithIdentifier robi to, co sama nazwa mówi; tworzy instancję kontrolera widoku, nic więcej. Nie * przedstawia * kontrolera widoku. – rdelmar

+0

@rdelmar Skierowałem twój komentarz, aby ci to wyjaśnić. – Michael

Odpowiedz

7

Obie odnoszą się do identyfikatorów powiązanych ze scenorysami. Główna różnica polega na tym, że jeden (performSegueWithIdentifer) tworzy instancję obiektu w oparciu o koniec segmentu (gdzie wskazuje punkt odsunięcia), podczas gdy drugi (instantiateViewControllerWithIdentifier) tworzy unikatowy znak VC oparty na identyfikatorze VC (a nie na segmencie).

Możesz mieć wiele segue z tym samym identyfikatorem w różnych miejscach scenorysu, podczas gdy VC w storyboardie nie mogą mieć tego samego identyfikatora.

6

performSegueWithIdentifer i instantiateViewControllerWithIdentifier oba są stosowane, aby przejść z jednej viewController innemu viewController. Ale jest tak wiele różnic ....

  1. Identyfikator 1st przypadku definiuje segue jak push modal, zwyczajów itp, które są wykorzystywane do wykonywania określonego rodzaju przejścia z jednego do innego VC VC . np.

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

    gdzie "push" jest identyfikatorem segmentu push.

    Identyfikator 2. przypadku definiuje VC, takie jak myViewController, myTableViewController, myNavigationController itd. 2. funkcja służy do przejścia do konkretnego VC (z identyfikatorem) z VC w storyBoard. np.

    gdzie "GameView" jest identyfikatorem GameViewController. Tutaj powstaje instancja GameViewController, a następnie wywoływana jest funkcja presentViewController, aby przejść do instancji vc.

  2. Dla pierwszego przypadku za pomocą identyfikatora segue można przekazać jeden, tym więcej wartości zmiennych do następnego VC. np.

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

    Ta funkcja jest również wywoływana, gdy self.performSegueWithIdentifier ("push", nadawca: self); jest wywoływany, aby przekazać wartość do GameViewController.

    Ale w 2 przypadku jest to możliwe bezpośrednio jak,

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