【发布时间】: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,我建议你查看苹果提供的视图生命周期文档。
标签: ios objective-c iphone uitableview