2

ルート タブバー VC とナビゲーション VC があり、タブバー インデックス 0 に 1 つのホーム VC があり、タブバー インデックス 1 に別の VC があります。

今、私は 1 つの subvc にプッシュしています。この subvc は上記の homevc に表示されています

次に、ボタンを使用してこの subvc をポップアウトし、使用して homevc に戻り、popToRootViewControllerすぐにインデックス 1 の vc に移動します。

ここでの問題は、ルートへのポップ後にインデックス 1 VC に移動しなかった場合、subvc がポップviewDidDisappearされ、通常どおりに呼び出されることです。ただし、ポップ後にルート タブバーのインデックス 1 または他のインデックスに移動すると、 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

ご覧のとおり、違いは、サブ VC を呼び出すことができないself.selectedIndex = 1;原因だけです。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;
   });
});

では、その背後にある根本的な原因を誰が説明できますか?

4

0 に答える 0