我有一個UITableViewController,並在didSelectRowAtIndexPath方法中創建一個UIViewController的實例,並將其推送到堆棧。UITableViewController - > EditView - 數據流
UIViewController是爲了編輯所選單元格的內容,但是如何讓ViewController中所做的更改轉移回TableViewController?
乾杯
我有一個UITableViewController,並在didSelectRowAtIndexPath方法中創建一個UIViewController的實例,並將其推送到堆棧。UITableViewController - > EditView - 數據流
UIViewController是爲了編輯所選單元格的內容,但是如何讓ViewController中所做的更改轉移回TableViewController?
乾杯
將數據傳遞迴層次結構的標準方法是使用委託,或者甚至更簡單地通過在編輯視圖控制器上查詢屬性以獲取編輯後的數據。
現在,當編輯視圖控制器時,您可以將它們設計爲支持直接編輯'實時'對象,或者可以讓您執行保存/取消模型的副本。
所以你想要的是你的編輯視圖控制器編輯某種具有各種屬性的ModelObject
實例。這些屬性將對應於視圖中的文本框或日期選擇器等。所以你可能有Person
與NSDate *dateOfBirth
和NSString *name
。
當您創建視圖控制器並將其推到導航控制器上時,您將其中的一個ModelObject
s編輯。您可以直接從您的模型中傳入一個對象,該對象將在用戶輸入值時進行「實時」編輯,也可以通過副本放棄更改並實施保存或取消工作流程。對於後者,您可以在推送編輯視圖之前自行添加「保存」和「取消」按鈕,以便您自己處理操作而不需要委派。
因此,當用戶在文本字段中輸入新值或更改日期選擇器時,編輯視圖控制器將設置此對象上的屬性。對於活動對象,這些更改將立即應用於您的模型。對於副本,當用戶點擊保存時,您可以查詢您傳入的對象的編輯視圖控制器,並將其合併/複製回您的模型中。如果用戶點擊取消,則只需放棄該對象。
覆蓋「父」或表視圖控制器的-viewWillAppear:
方法並重新加載表視圖數據存在,使用[tableView reloadData];
。
當您從編輯視圖控制器返回表視圖控制器時,表視圖控制器的-viewWillAppear:
方法會重新加載數據,然後調用表視圖委託方法。
您必須確保兩個控制器以某種方式「共享」數據。最簡單的選擇是讓第一個控制器通過表中選定的數組(或僅選中的對象)。第二個視圖然後會直接修改該數組(或單個對象),然後當您關閉第二個視圖時將顯示修改後的數據。
您可能需要重新加載表格。
有意義嗎?
是的,但它是我如何讓他們分享數據,我無法將我的頭圍繞atm ... – mbogh 2010-07-13 07:38:02
你不知道如何在類中聲明屬性以及如何設置它們? – willcodejavaforfood 2010-07-13 09:19:24
是的,但我如何鏈接數據? 在tableviewcontroller didSelectRowAtIndexPath中,我創建了uiviewcontroller的實例,然後訪問屬性,然後將uiviewcontroller推入堆棧。 uiviewcontroller現在有來自tableviewcontroller的數據,但我們如何去其他方式? – mbogh 2010-07-13 07:33:11
這是如何完成取決於你如何設置你的表視圖控制器。但是,您可以將模型作爲表視圖和編輯視圖控制器可以訪問和操作的表視圖屬性。Apple的核心數據教程涵蓋了使用核心數據的一種方法,但這個想法是一樣的:http://developer.apple.com/iphone/library/documentation/DataManagement/Conceptual/iPhoneCoreData01/Introduction/Introduction.html – 2010-07-13 17:06:09