При вызове popToRootViewController и установке tabBarController selectedIndex извлеченный VC не вызывал viewDidDisappear в том же цикле выполнения - PullRequest
0 голосов
/ 10 мая 2018

У меня есть корневой vc панели вкладок и навигационный vc с одним домашним vc в индексе панели вкладок 0, и один другой vc в индексе панели вкладок 1;

Теперь я нажимаю на один subvc, и этот subvc показан выше на homevc

Затем я вызвал, используя кнопку, чтобы вытащить этот subvc и вернуться к homevc, используя popToRootViewController, а затем немедленно перейти к индексу 1 vc.

Теперь проблема в том, что, если бы я не пошел в индекс 1 vc после pop в root, subvc выскочил бы, и его viewDidDisappear будет вызываться как обычно, однако, если я перейду к index 1 или другому индексу для корневой вкладки после pop to root, subvc НЕ будет вызывать viewDidDisappear при извлечении.

Я знаю, что мое описание сбивает с толку, поэтому вот код:

//In this version, the subVC's viewDidDisappear would NOT be called 
[self.subVC popToRootViewControllerAnimated:NO]; //self is kind of UITabbarVController
self.selectedIndex = 1; //switch to other tab

//In this one, the subVC's viewDidDisappear would be called as usual
[self.subVC popToRootViewControllerAnimated:NO]; //self is kind of UITabbarVController

Итак, как вы видите, разница только в self.selectedIndex = 1;, из-за которой мой subVC не может вызвать viewDidDisappear.

Но я получаю решение , как показано ниже:

//In this version, the main idea is to skip two runloops 
//to execute self.selectedIndex = 1; 
//so the subVC's viewDidDisappear would be called
[self.subVC popToRootViewControllerAnimated:NO];
dispatch_async(dispatch_get_main_queue(), ^{
   dispatch_async(dispatch_get_main_queue(), ^{
       self.selectedIndex = 1;
   });
});

Так, кто может объяснить основную причину этого?

...