UINavigationControllersがViewControllerのスタックを保存し、IUTabBarControllerタブを切り替えるたびに一番上のものを表示するのは正常です。つまり、タブバーがスタックから離れるたびに、各UINavigationControllerがスタックを解放するようにしたいということですか?その場合は、UITabBarControllerDelegateのドキュメントをご覧ください。
http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UITabBarControllerDelegate_Protocol/Reference/Reference.html#//apple_ref/doc/uid/TP40006932
ここに、タブが切り替えられたときに通知するメソッドがあります。
– tabBarController:shouldSelectViewController:
– tabBarController:didSelectViewController:
デリゲートプロトコルがどのように機能するかを知っていると思います。
次に、スタックからViewControllerを「ポップ」するメソッドがあるUINavigationControllerのドキュメントを見てください。
http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UINavigationController_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006934
これは、一番上(「ルート」)のViewControllerにポップします。
– popToRootViewControllerAnimated:
注意点-一般に、ユーザーはUITabBarControllerタブが最後に切り替えたときと同じビューを保持することを期待しています。
また、あなたが話しているのは、タブバータブが2回タップされたときのデフォルトの動作です(つまり、そのタブバータブがすでに選択されているときにタップされたとき)。