0

私がやりたいことについて例を挙げましょう。4 つの TabBarItems を持つタブがあるため、4 つのコントローラーが含まれています。また、タブ バーのアイコンに表示してはならないコントローラーがありますが、これら 4 つのコントローラーのいずれか内のボタンがタッチされると表示されます。したがって、表示されるとき、タブバーには選択されたタブがなく、すべての項目が選択解除されている必要があります。タブアイコンに表示されていないゴーストコントローラーのように見えるはずですが、実際にはタブバーコントローラーにあるコントローラーです。

これを達成するための最良の方法は何ですか?参考までに、モーダル ダイアログは必要ありません。タブバーは常に下に表示されている必要があります。

4

1 に答える 1

0

役立つかもしれないことの 1 つは、タブ間の遷移がいつ発生するかを知ることです。トランジションが発生するとすぐにゴースト ビューを表示すると、必要なことを行うのに十分な制御が得られる可能性があります。

これを行う方法は次のとおりです。最初に、UITabBarController を TabViewController にサブクラス化します (たとえば)。TabViewController に、次のメソッドを含めます。

// Pass this message on to views so they know when transitions are occuring
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {

    UIViewController <UITabBarControllerDelegate> *obj;

    for ( obj in self.viewControllers ) {
        if ( [obj respondsToSelector:_cmd] ) {
            [obj tabBarController:tabBarController didSelectViewController:viewController];
        }
    }
}

UITabBarControllerDelegate プロトコルを採用するように、各タブ付きビュー クラスを設定します。次に、各クラスに次のようなメソッドを含めて、遷移イベントを「インターセプト」します。

// This is called when a transition between tabs happens
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {

    if ( [viewController isEqual:self] ) {
        // Transitioning to me

        // Do stuff
   }    

    else  {
        // Transitioning to someone else

        // Do stuff
    }
}

(注:これを実装するよりクリーンな方法があるかもしれませんが、私にとってはうまく機能しています...)

于 2012-08-25T18:23:11.460 に答える