0

Ist es möglich, eine UIViewController in iOS zu recyceln/zu zerstören?F: Wie erzwinge die Zerstörung eines Viewcontrollers in iOS

ich diese github project bin mit einem benutzerdefinierten UIViewControllerTransition zu erhalten:

Hier ist der Ablauf des Programms:

  • vc1 Geschenke zu einem nav, auf denen die rootVc sind vc2
  • In vc2 dort ist ein UIButton. Wenn Sie darauf klicken, wird vc2 's NavigatioCcontroller wird entlassen.

Aber das Problem ist, dass vc2 nicht durch das Betriebssystem zurückgeführt wird, so dass, wenn ich vc1 Fortschritte, dann anwesend nav (die rootVcvc2 ist), wird vc2 die viewDidLoad Methode nicht nennen.

Nicht sicher, wo das Problem liegt. Gibt es eine Möglichkeit, dass, wenn ich vc2 's UIButton klicke, zerstöre die nav und vc2? Auf diese Weise, wenn ich wieder zu nav, vc2viewDidload wird wieder aufgerufen werden.

-Code:

in vc1:

LMLQQSearchSelectViewController *search_vc = [[LMLQQSearchSelectViewController alloc] initWithNibName:@"LMLQQSearchSelectViewController" bundle:nil]; 
search_vc.fromController = @"KnowledgeViewController"; 
search_vc.pre_type = @"ENCYCLOPEDIACOL"; 
LMLQQSearchNavController *nav = [[LMLQQSearchNavController alloc] initWithRootViewController:search_vc]; 
nav.navigationBarHidden = YES; 


__weak typeof(self) weakSelf = self; 

_search_header.block = ^(){ 

    weakSelf.transition = [[HYBEaseInOutTransition alloc] initWithPresented:^(UIViewController *presented, UIViewController *presenting, UIViewController *source, HYBBaseTransition *transition) { 
     HYBEaseInOutTransition *modal = (HYBEaseInOutTransition *)transition; 

     // If you don't specify, it will use default value 
     // Default is NO, if set to YES, it will use spring animation. 
     modal.animatedWithSpring = NO; 
    } dismissed:^(UIViewController *dismissed, HYBBaseTransition *transition) { 
     // do nothing 
    }]; 

    nav.transitioningDelegate = weakSelf.transition; 
    [weakSelf presentViewController:nav animated:YES completion:NULL]; 

}; 

Antwort

0

Wenn nav entlassen wird, müssen Sie es auf eine Referenz hängen, so dass Sie es später erneut anzeigen kann. Und weil nav einen Verweis auf vc2 enthält, erhalten Sie die gleiche Instanz wieder zurück, wenn Sie nav erneut anzeigen.

Sie haben zwei Möglichkeiten. Erstens, Sie könnten Ihre Referenz auf nav freigeben, nachdem es entlassen wurde, die dann auch vc2 freigeben wird. Zweitens können Sie den Code, den Sie ausführen möchten, jedes Mal verschieben, wenn vc2 von viewDidLoad in viewDidAppear angezeigt wird.

+0

Ich habe an die 'Option 2' gedacht, es wird einige Probleme in meinem Projekt verursachen, ich werde einen Test in Option 1 nehmen, meinst du in der Methode:' [self.navigationController disneyViewControllerAnimated: YES completion:^{ // Zurücksetzen der Root-VC? }]; ' – aircraft

Verwandte Themen