0

我有我的UIViewController主要是使用故事板文件進行設置。在某些情況下,我使用UINavigationControllerUITableViewController的通常模式,讓用戶深入瞭解應用程序的配置細節。每個表格視圖單元格都會導致另一個視圖控制器被壓入導航堆棧(當單元格被選中時),用戶可以使用導航控制器的後退按鈕返回概覽表格視圖控制器。如何在彈出故事板實例化視圖控制器後存儲數據,然後將其重新導入導航控制器堆棧

我有概述UITableViewController和故事板中設置的細節UIViewController,包括它們之間使用segues的連接。

當我在概覽中選擇表格視圖單元格時,正確的詳細視圖控制器被推入導航堆棧,其中大部分工作正常。但是,如果我然後在詳細視圖控制器中更改一些視圖並返回(可能是因爲我想查找某些內容)(因此會彈出詳細視圖控制器),然後再次按下同一個單元,視圖將重置爲原始狀態我輸入的數據丟失了。

當細節控制器彈出後,我可以將這些數據保存在概覽控制器中,並在再次按下時恢復它,但是我想知道這是否是最好的方法。

在過去,我會自己構建詳細視圖控制器並將其存儲在實例變量中。然後,如果我必須再次推它,我會推動完全相同的對象(不只是同一個類的一個實例),這意味着它也保存了視圖的狀態。

但據我所知,使用故事板,爲每個segue一個新的視圖控制器被實例化,所以沒有數據保存。因爲它是隻讀的,所以我也不能在prepareforSegue:sender:中設置segue的destinationViewController屬性。

有沒有辦法在segue中重用已經創建的視圖控制器? 還是有一些其他優雅的方式來存儲數據,以便在重新使用詳細控制器時重用它?理想情況下,概覽表視圖控制器不需要知道,因爲在這種情況下,它必須存儲所有詳細視圖控制器的數據。

我知道我可以從故事板中檢索視圖控制器,自己實例化它並將其推入tableView:didSelectRowAtIndexPath:,但我喜歡故事板提供的segues和視圖結構的概述,因此我想保留這一點可能。

更新: 我覺得我的描述有點不清楚。我確實已經保存了數據,但是目前它保存在詳細視圖控制器中(它不僅僅是在視圖中「保存」,我不想濫用視圖來存儲我的數據),所以返回是隱含的「在我的情況下保存我的當前狀態」。問題是,我無法以簡單的方式實現它,而無需將數據存儲在概覽控制器IN ADDITION中以將其存儲在詳細視圖控制器中。我不想將它存儲在概覽控制器中,因爲它是屬於詳細視圖控制器的數據,應該由它來管理。

回答

0

當然,當細節控制器被彈出時,我可以將這些數據保存在概覽控制器中,並在再次按下時恢復它,但我想知道這是否是最好的方法。

我認爲這是最好的方法。如果正在使用詳細視圖控制器來編輯數據,通常可以接受的做法是用戶只能通過保存數據或取消其更改來保留數據。

+0

我明白了。我已經保存了數據,但目前它保存在詳細視圖控制器中(它不僅僅是在視圖中「保存」,也許有點不清楚),所以返回是一個隱含的「保存當前狀態觀點「在我的情況。問題是,我無法以簡單的方式實現它,而無需將數據存儲在概覽控制器IN ADDITION中以將其存儲在詳細視圖控制器中。 –

+0

是的,但我所說的是「在這個視圖中保存我的當前狀態」不是標準的iOS用戶界面設計。標準做法是,當用戶在做出更改後離開詳細信息視圖控制器時,他們應該知道他們正在對基礎模型進行更改,或者他們應該知道他們取消了該更改,而不是將更改保存到基礎模型。 – SwampThingTom

+0

好的,所以從可用性的角度來看,我可以考慮添加一個保存按鈕,用戶必須積極使用保存數據。但是這並沒有改變這個問題。如果用戶按下保存按鈕,我仍會彈出視圖控制器並在總覽控制器中顯示某種摘要。然後,當用戶再次選擇它來修改數據時,我想要顯示他們之前看到的相同數據。我將數據存儲在視圖控制器中,因此如果我可以重用已經存在的視圖控制器,一切都會好起來的。 –

相關問題