iOS 7中每次重新初始化UITableview单元格

iOS 7中每次重新初始化UITableview单元格,ios,uitableview,ios7,Ios,Uitableview,Ios7,全部, 我希望你们大多数人都知道,对于ios7,不需要对tableview重用进行空检查 if (cell == nil) { 但不幸的是,由于这个原因,单元格总是被重新初始化,因为我们将代码放在初始化值的相同方法中。但问题只在于tableview中的文本字段 让我解释一下情况。我有一个多行的表视图,有些行包含多个文本框。当页面加载时,我用来自服务器的数据填充文本框。由于单元格总是像我上面解释的那样被重新初始化,所以我在字段中输入的任何内容都会消失,一旦我向下滚动并返回到初始阶段,服务器数据就

全部,

我希望你们大多数人都知道,对于ios7,不需要对tableview重用进行空检查

if (cell == nil) {
但不幸的是,由于这个原因,单元格总是被重新初始化,因为我们将代码放在初始化值的相同方法中。但问题只在于tableview中的文本字段

让我解释一下情况。我有一个多行的表视图,有些行包含多个文本框。当页面加载时,我用来自服务器的数据填充文本框。由于单元格总是像我上面解释的那样被重新初始化,所以我在字段中输入的任何内容都会消失,一旦我向下滚动并返回到初始阶段,服务器数据就会被重新填充。这是因为填充数据代码的位置也是相同的。获取可重用单元后,它将填充数据

在ios6之前,我们使用if(cell==nil),因此我们在cell中加载服务器数据,在重用cell时,这段代码永远不会被调用


我有其他肮脏的解决办法,但想知道是否有其他人有一个优雅的方式来处理这个问题。请帮忙

是的,这是UITableView的预期行为。出于性能原因,单元被重用。因此,每次调用tableView:cellforrowatinexpath:时,您都有责任填充表视图单元格中的视图

从你的问题中我不明白的是,你是不是每次看到一个手机时都会打一个网络电话?如果是这样,请将结果缓存到某个地方。或者,如果它是少量的数据,考虑在开始时只做一次(仍然需要异步)。 我看到很多开发人员所做的一件事是将大量代码移动到UITableViewCell子类中,这听起来是个好主意,因为它是模块化的,但这使得解决此类问题更加困难。让表视图数据源管理网络调用


如果你需要一些灵感,看看苹果公司的LazyTableImages样本。

你只是不在表格视图单元格中存储任何数据,而是存储在填充表格单元格的模型中。这永远是应该做的事情


从MVC的角度来看,
UITableViewCell
是一个视图。由于iOS重复使用它,因此您应该使用模型来创建视图。

您只是不在表视图单元格中存储任何数据,而是存储在填充表单元格的模型中。这总是应该做的。@rckoenes您的解决方案似乎是正确的。我们是否总是需要将模型与everycell关联?这是最常见的方法,因为
UITableViewCell
只是一个视图,可以被iOS重用。从MVC的角度来看,是的,你应该总是使用一个模型。似乎是对的。如果你把你的答案作为“答案”而不是评论,我可以接受。不,我不会为每个手机打网络电话。我认为您没有正确理解我的问题。您是否建议,无论何时我们在文本字段中输入内容,都应该使用文本字段的委托方法将其保存在模型中?这是有意义的,因为模型保存了显示的数据。这不是一个非常复杂的解决方案吗?这不是一个常见的问题吗?没有什么好办法吗?您可以创建一些通用的方法来处理文本条目。复杂性取决于你。