У меня есть корневой 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;
});
});
Так, кто может объяснить основную причину этого?