2017-08-31 51 views
0

我有一個標籤欄控制器,其中一個標籤是我的主屏幕,另一個是設置頁面。在設置頁面上,用戶可以編輯隨後保存在NSUserDefaults中的內容,但當它們返回到主頁選項卡時,這些更改不會立即反映,因爲視圖已經加載。當我返回到該選項卡時,如何使視圖完全刷新?單擊標籤時自動刷新視圖

+0

如果數據顯示在表視圖或集合視圖上,那麼您可以重新加載ViewWillAppear方法中的任何一個控制器。 –

+0

@TusharSharma數據以標籤顯示。 ViewWillAppear每次點擊標籤時都會運行嗎? –

+1

每次出現視圖時,ViewWillAppear都會被調用。 –

回答

0

viewDidLoad僅在您的視圖控制器的視圖首次被加載時調用 - 之後它將保留在內存中,所以一般情況下它將永遠不會再被調用,直到您創建視圖控制器的另一個實例。

因此,不要將viewDidLoad()中的邏輯寫入您可能已寫入的代碼中,將代碼寫入/放入viewWillAppear()中,此方法在出現視圖時會被調用。所以在這裏你的NSUserDefaults值將被設置爲新的值將覆蓋現有的值。

//希望我能夠幫助你以某種方式,編碼快樂:)

0

這取決於何時做你想要刷新視圖。

1.您是否想在每次打開視圖時刷新。 2.您是否想要僅在設置更改時刷新視圖?

如果它是第一個,那麼你在viewWillAppear中編寫刷新邏輯 如果它是第二個,那麼只要改變用戶設置就可以添加通知。

在HomeVC添加通知作爲觀察者和更新標籤上觀察者方法

代碼發佈通知:

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

代碼,用於接收通知:

在HomeVC viewWillAppear中:

[[NSNotificationCenter defaultCenter] removeObserver:self]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshViews:) name:@"settingsChanged" object:nil]; 

執行會面hod on HomeVC

- (void)refreshViews:(NSNotification *)notification { 
NSLog(@"Received Notification - Someone seems to have logged in"); 
}