0

Возможно ли переработать/принудительно уничтожить UIViewController в iOS?В: Как заставить уничтожить viewcontroller в iOS?

Я использую этот github project, чтобы получить пользовательские UIViewControllerTransition:

Вот поток программы:

  • vc1 подарки к в nav, к которому rootVc является vc2
  • В vc2 там это UIButton. При нажатии, vc2 в NavigatioCcontroller уволит.

Но проблема в том, что vc2 не перерабатывается ОС, поэтому, когда я прогрессировать vc1, затем представить nav (который rootVc является vc2), vc2 не вызывается метод viewDidLoad.

Не знаете где проблема. Есть ли способ, чтобы при щелчке vc2UIButton, силой уничтожить nav и vc2? Таким образом, при повторном представлении nav, vc2 будет вызываться viewDidload.

Код:

в 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]; 

}; 

ответ

0

Когда nav уволен, вы должны висеть на ссылку на него, так что вы можете повторно отобразить его позже. А поскольку nav ссылается на vc2, вы снова получаете тот же экземпляр, когда вы повторно отображаете nav.

У вас есть два варианта. Во-первых, вы можете выслать свою ссылку на nav после ее увольнения, после чего будет выпущен vc2. Два, вы можете перемещать код, который хотите запускать каждый раз, когда vc2 появляется от viewDidLoad до viewDidAppear.

+0

Я думаю о «варианте 2», это вызовет некоторые проблемы в моем проекте, я проведу тест в варианте 1, вы имеете в виду в методе: '[self.navigationController rejectViewControllerAnimated: YES complete:^{ // перезагрузите root vc? }]; – aircraft