2015-02-06 41 views
-1

這是我的場景。我有一個產品屏幕和產品詳細信息屏幕。基本上,您可以點擊該產品並轉到產品詳細信息屏幕。現在,當我在產品詳細信息屏幕上時,我想要執行一些操作,例如更改產品名稱,並且當我使用後退按鈕轉到返回時,我希望在產品屏幕中反映出來。更新屏幕上不可見的UITableViewController

我該怎麼做?

解決方案我想:

我創建了產品的細節控制器上的協議,並有產品控制器訂閱的協議。每次更改產品名稱時,產品控制器都會觸發協議,但我無法更改產品控制器上的任何UI元素,因爲產品控制器當前不可見。

目前,我正在重新加載所有關於viewWillAppear的數據,但這意味着每次加載視圖時都會調用服務器(iCloud)。這會造成漫長的等待時間。

有什麼建議嗎?

+1

如果修改表視圖正在查看的數據結構並在viewWillAppear上執行[tableView reload]會不會解決您的問題? – 2015-02-06 15:54:22

+0

這是我目前實施的解決方案。請參閱問題中的更新文本。 – 2015-02-06 15:56:54

+0

如果您更改了產品名稱,您是否也必須在雲中進行更改? – 2015-02-06 16:09:09

回答

1

在viewWillAppear上,您可以更新數據已更改的單個單元格。你知道這是點擊的,所以你可以參考存儲到,然後調用:

[self.tableView beginUpdates]; 
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPathOfYourCell, nil] withRowAnimation:UITableViewRowAnimationNone]; 
[self.tableView endUpdates]; 

這將避免更新整個表,並導致額外的延遲。如果表格視圖足夠快速滾動,它爲每個單元獲取數據的位置,那麼這個速度也會足夠快。

+0

如何存儲對所選NSIndexPath的引用。如果我將它存儲在一個屬性中,那麼當用戶返回到視圖時它將變爲空。 – 2015-02-06 16:34:27

+0

在你的類的頂部你會這樣做:@property(nonatomic,strong)NSIndexPath * selctedPath;然後當他們選擇一個單元格時:self.selectedPath = indexPath;當你的視圖控制器被刪除時,它就在另一個後面,那麼selectedPath的值將保留。 – 2015-02-06 16:37:03

+0

這正是我正在做的!即使我硬編碼並更改了索引0,我也不會更新產品控制器的用戶界面。 – 2015-02-06 16:38:16