2009-07-15 7 views
0

は、私は次の質問を持っているTabBarController NAvigationControllerとのUIViewController

UItabbarController

....いくつかのUINAvigationControllers ....

*( 1)UINavigationController

UIViewController (UItableView) - When select one row it goes to...(by push) to: 

       UIViewController (UItableView) - And here the same than before, for each row i open a new tableview.... 

私の問題i私がタブバー項目をクリックすると、私はこれを見た最後の時間のようなviewControllerビューを見て、*(1)最初に別の時間を表示する(私が好きなように)リロードしないでください

私は私はタブバー項目をクリックするたびにsthを書く。このタブバー項目の最初のビューをリロードする。

PD:私は呼び出している:[theTableView reloadData];メソッド "viewWillAppear"で 私のナビゲーションコントローラでは、View Controller(テーブルビューなど)があり、「didSelectRowAtIndexPath」メソッドで1つの行をクリックすると、別のView Controllerが「myController」を呼び出して作成されます。これは次の表のある行をクリックするたびに表示されます。

次に、viewWillAppearというメソッドでテーブルビューをリロードしないようにしてください。それは、次のビューコントローラがルートに挿入されたことを画面から取り除くことです。

私はリグですか?履歴書

私のアプリは、次があります:画面

  • (限り、あなたが望むよう)各タブバー内のナビゲーションの間を移動する

    • タブバーが、なぜですか?すべてのtabBarItemsがテーブルを表示しているので、ある行をクリックすると別のテーブルを開くと、.....

    私の問題は、クリックすると1番目のメインテーブルに戻ってみたいと思いますタブバー。アプリがこれをしていない瞬間、このタブの最後の訪問であったスカリー(テーブルビュー)で続行します。 (私はNSLogを作ったので、それを表示しないので、私は2回クリックすると、はい、それは戻ってきますが、 "viewWillLoad"または "didSelectViewController"メソッドに入力しないので、完全に真実ではありません。

    sketcheは、このことができます:

    AppDelegate - > WelcomeScreen - > VideosTableViewController - > RElatedVideosTableViewController - > ..... ..... ....

    第一のものは、表示することですようこそ画面(重要ではない、いくつかのボタンだけ)、このクラスでは、TabControllerを "localViewControllersArray"で初期化しました。これはNavControllerのNSMutableArrayで、それぞれ1つのViewControllerで初期化されています。

    そこで私は、この歓迎画面内のボタンのいずれかを押したときに、私は次のステップではタブバーコントローラ(VideosTableViewControllerを表示します)

    を翔、私は「DidSelectRowAtIndexPath」で、一列にクリックしたときに、私が作成RElatedVideosTableViewController、と私は「[... [自己navigationController]プッシュ: "私はアニメーション" 作成relatedvideoテーブルビュー:YES]で、これを押す。

    と私もあります

    追加:UITabBarControllerDelegate 追加します:

    • (ボイド)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers: (にNSArray *)viewControllers 変更された:(BOOL)が変更{}

    • (ボイド)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(のUIViewController *)のViewController {IF([のViewController isKindOfClass:[UINavigationController クラス]) {[(UINavigationController *)のViewController popToRootViewContro ller:NO]; [TheTableView reloadData]; NSLog(@ "RELOAD"); }}

    クラスの初期化時: [super.tabBarController setDelegate:自己]。

    しかし、コンソールでは私が作っているNSLogはこの方法では実行されていません。

  • 答えて

    1

    Interface Builderでまたはコードのいずれかで、アプリのデリゲートタブバーコントローラのデリゲートを作成します、あなたが通知を受ける時にタブバースイッチ別のビューに、次に

    - (void)applicationDidFinishLaunching 
    { 
        ... 
        self.tabBarController.delegate = self; 
    } 
    

    をあなたはポップ、その時点でこのようにして選択ナビゲーションコントローラのルートに:

    - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
    { 
         if ([viewController isKindOfClass:[UINavigationController class]]) 
         { 
           [(UINavigationController *)viewController popToRootViewController:NO]; 
         } 
    } 
    

    各ビューコントローラは、独自のテーブルビューを持つ必要がありますので、私はあなたがリロードでやろうとしているのか分かりません。

    +0

    Imはリロードをしようなぜなら、私はテーブルを表示するたびにこれを使って連結メソッドを呼び出すからです。 –

    +0

    私は私のコードにこれを追加、BT didSelectViewController方法で入力することなく、同じことをやって続けています。 私のappdelegateと残りの部分との間に、私はwelcomeScreen viewcontrollerを持っています。そこで、tabbarcontrolelrを宣言し、どこに行を置くかを指定します:self.tabbarController.delegate = self;このクラスに入っています。 私は、これはいくつかの違いを作る場合は知りません。 –

    +0

    デリゲートを設定する行にブレークポイントを設定します。それが呼び出されない場合、あなたは(明らかに)他の場所に置く必要があります。おそらくあなたは呼び出されないinitメソッドに入れているでしょう。 –

    0
    • (ボイド)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(のUIViewController *)のViewController {のNSLog(@ "WelcomeScreenで - > didSelectViewController")。

      IF([のViewController isKindOfClass:[UINavigationController クラス]]){ のNSLog(@ "WelcomeScreenで - > IF - > didSelectViewController")。 [(UINavigationController *)viewController popToRootViewController:YES]; のNSLog(@ "アウトWelcomeScreen - > IF - > didSelectViewController");

      }のNSLog(@ "WelcomeScreenアウト - > didSelectViewController")。 }

    は私が持っている: がキャッチされない例外により 'NSInvalidArgumentException'、理由にアプリを終了*:「*は - [UINavigationController popToRootViewControllerは:]:認識されていないセレクタはインスタンスに送信

    +0

    Nos私はとても混乱しています。私は* UITabBArControllerを持っているクラスで、このメソッドのコードと<...Delegate>を置くべきか、私は1つ、「サブクラス」タイプのUIViewControllerでこれを行うことができます? –

    関連する問題