停止调用 cellForRowAtIndexPath
Posted
技术标签:
【中文标题】停止调用 cellForRowAtIndexPath【英文标题】:Stop cellForRowAtIndexPath from being called 【发布时间】:2015-07-29 20:56:25 【问题描述】:我的应用程序中有一个表格视图,其中每个单元格仅包含一个文本视图。这些文本视图由存储在 NSUserDefaults 中的文本填充。用户可以更改文本,然后再次保存。来自 NSUserDefaults 的文本数组(用于填充文本视图的文本)在 viewDidLoad
处加载。但是,单元格中文本视图的文本设置在cellForRowAtIndexPath
中。问题是当用户滚动 tableview 时会调用 cellForRowAtIndexPath
,因此如果他/她正在编辑其中一个 textViews 并在打字时滚动,一切都会消失,因为调用了 cellForRowAtIndexPath
,并且 textViews 文本是从保存的在viewDidLoad
上加载的数据。
所以..我想也许让cellForRowAtIndexPath
只更改一次textviews 的文本(在应用程序启动时)会解决问题,但事实证明cellForRowAtIndexPath
是为每个单元格单独调用的。所以它工作但只加载了第一个单元格的 textView 的文本,因为我只让 cellForRowAtIndexPath
这样做一次。
我的问题是:我怎样才能让cellForRowAtIndexPath
仅在调用 viewDidLoad 时更改所有单元格的 textView 文本?或者我可以通过viewDidLoad
方法为每个单元格设置 textView 的文本吗?因为这显然可以解决问题。
【问题讨论】:
我不确定您是否完全理解UITableView
的工作原理。 -cellForRowAtIndexPath
应该在每次表格需要新单元格时调用(这在您滚动时很常见)。另外,你确定-cellForRowAtIndexPath
是在-viewDidLoad
之前被调用的吗?这听起来不对。
没错,我测试过了,viewDidLoad
在-cellForRowAtIndexPath
之前被调用。有什么建议可以解决这个问题吗?
您需要以某种方式将更改的数据保存在您的UITableViewCell
中。您可以将它放在一个数组中并将其存储在内存中,或者如果您需要将其保存下来以供以后的会话使用,您可以将其保存到 CoreData。关于viewDidLoad
,我建议你查看苹果提供的视图生命周期文档。
【参考方案1】:
每当用户在您的一个单元格中更改文本视图中的文本时 - 立即将该文本保存到您的 textArray。现在,如果用户滚动离开,然后返回到该单元格 - 该单元格将包含更新后的文本。然后当用户在此屏幕中完成文本编辑后,将所有更改保存到 NSUserDefaults(例如,您可以将其保存在 viewWillDisappear 中)。
【讨论】:
以上是关于停止调用 cellForRowAtIndexPath的主要内容,如果未能解决你的问题,请参考以下文章