2011-12-20 14 views
0

私はタブバーを持っています - それぞれにナビゲーションコントローラを備えた2つのタブ。 2番目のカードではデータベースを変更するので、最初のカードにデータをリフレッシュする必要があります(私はviewWillAppearを知っています)。しかし、ナビゲーションコントローラと私はそれの次のビューにすることができますがあります。私は(2番目のタブから)最初のタブ上のナビゲーションコントローラに最初のビューに戻すにはどうすればよいタブバーの他のビューを他のタブからプッシュするにはどうすればいいですか?

-

(.XIBによって生憎、私は、静的な接続ナビゲーションバー、タブバーとを持っていますか)?または、他のビューをどのようにプッシュできますか?ナビゲーションコントローラーを解除しないでください。あなたの最初のタブのあなたのviewWillAppearで

答えて

1

最初のタブバーのナビゲーションコントローラを[firstTabBarViewController.navigationController popToRootViewControllerAnimated:NO]にポップする必要があります。

この問題は、最初のタブのビューコントローラへの参照が必要な場合のみ発生します。

ローカル通知を使用することもできます(前にこの方法を使用しました)。

最初のビューコントローラでは、viewDidLoadメソッドは通知を登録するために次の行を追加します。通知には、DatabaseChangedNotificationのような何かの名前を付けることができます。その後databaseHasChangedと呼ばれる新しい(空)メソッドを追加

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(databaeHasChanged:) name:@"DatabaseChangedNotification" object:nil]; 

、このメソッドは、通知が発生するたびに呼び出されます。次に、あなたのdeallocメソッドで次のコードを使用して通知の登録を解除してください

-(void)databaseHasChanged 
{ 
    [self.navigationController popToRootViewControllerAnimated:NO]; 
} 

::あなたのdatabaseHasChanged方法は、のようになるはずです

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

上記のコードをセットアップ聞くとするあなたの最初のビューコントローラを意志DatabaseChangedNotificationを処理します。

これで、データベースを変更するコードを2番目のビューコントローラに追加するだけで済みます。データベースが変更された後だけで次のコードを使用してDatabaseChangedNotificationを発射:

[[NSNotificationCenter defaultCenter] postNotificationName:@"DatabaseChangedNotification" 
                object:nil]; 
+0

おかげでそれは完璧に動作します – user968991

1

あなたは、ルートのViewControllerにポップしたいと思う:

[self.navigationController popToRootViewControllerAnimated:YES]; 

をあなたの2番目のタブからこれを行うことはできません。ただし、フラグをどこかに設定することもできます。 nsuserdefaultsまたはデータベースとviewWillAppear(最初のタブ内)で、このフラグをチェックして、ルートviewcontrollerにポップする必要があるかどうかを確認します。

+0

おかげで、私は通知でそれを使用しますが、素晴らしい作品aslo nsuserdefaultsとバージョン。 – user968991

関連する問題