2011-12-20 157 views
0

我有tabbar - 每個都帶有導航控制器的兩個選項卡。在第二張卡上我更改了數據庫,所以我需要在第一張卡上刷新數據(我知道viewWillAppear)。但有導航控制器,我可以在它的下一個視圖。如何從其他選項卡推入tabbar中的其他視圖?

(可惜的是,我有導航欄,連接靜態的TabBar - 通過的.xib)

我怎樣才能返回到第一視圖在導航控制器第一突片(從第二標籤)上?或者我可以如何推動其他觀點,但不要打破導航控制器?

回答

1

你需要在你的第一個標籤欄根彈出導航控制器,[firstTabBarViewController.navigationController popToRootViewControllerAnimated:NO];

與此唯一的問題是,你需要有你的第一個標籤視圖控制器的參考。

另一種方式,你可以做到這一點(我之前已經用這種方法)是使用本地通知。

在你的第一個視圖控制器viewDidLoad方法中添加以下行來的註冊通知,您可以命名通知任何你喜歡的也許像DatabaseChangedNotification。

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

然後添加稱爲databaseHasChanged一個新的(無效)方法,該方法將被通知升高每次調用。你databaseHasChanged方法應該是這個樣子:

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

然後確保你使用下面的代碼註銷通知:

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

上面的代碼將設置你的第一個視圖控制器傾聽和處理DatabaseChangedNotification。

現在,您只需向第二個視圖控制器添加一些代碼即可更改數據庫。數據庫已更改後使用下面的代碼只是火DatabaseChangedNotification:

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

感謝它的完美 – user968991 2011-12-20 13:29:57

1

在你的第一個標籤頁的viewWillAppear中你要彈出到根視圖 - 控制:

[self.navigationController popToRootViewControllerAnimated:YES]; 

你不能從你的第二個選項卡中做到這一點。然而,你可以在某個地方設置一個標誌,例如在nsuserdefaults或數據庫中以及viewWillAppear中(在第一個標籤中),請檢查此標誌以查看是否需要彈出到根視圖控制器。

+0

謝謝,我通知用它,但與版本NSUserDefaults的ASLO的偉大工程。 – user968991 2011-12-20 13:31:29

相關問題