簡體   English   中英

如何從其他選項卡中在tabbar中推送其他視圖?

[英]How to push other view in tabbar from other tab?

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

(不幸的是,我有帶導航欄的tabbar,連接靜態 - 通過.XIB)

如何在第一個選項卡(從第二個選項卡)返回導航控制器中的第一個視圖? 或者我如何推動其他觀點,但不要破壞導航控制器?

在第一個選項卡的viewWillAppear中,您將要彈出到根視圖控制器:

[self.navigationController popToRootViewControllerAnimated:YES];

您無法從第二個標簽中執行此操作。 但是,你可以在某個地方設置一個標志,例如在nsuserdefaults或你的數據庫中,在你的viewWillAppear中(在你的第一個標簽中)檢查這個標志,看你是否需要彈出到根視圖控制器。

你需要將第一個標簽欄中的導航控制器彈出到root,[firstTabBarViewController.navigationController popToRootViewControllerAnimated:NO];

唯一的問題是您需要引用第一個選項卡視圖控制器。

你可以做的另一種方式(我之前使用過這種方法)是使用本地通知。

在您的第一個視圖控制器viewDidLoad方法中添加以下行來注冊通知,您可以將通知命名為您喜歡的任何名稱,例如DatabaseChangedNotification。

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

然后添加一個名為databaseHasChanged的新(void)方法,每次引發通知時都會調用此方法。 您的databaseHasChanged方法應該類似於:

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

然后在dealloc方法中確保使用以下代碼取消注冊通知:

   [[NSNotificationCenter defaultCenter] removeObserver:self];

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

現在您需要做的就是向第二個視圖控制器添加一些代碼來更改數據庫。 數據庫更改后,只需使用以下代碼觸發DatabaseChangedNotification:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM