2015-02-06 91 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