首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UITableview单元每次在iOS 7中重新初始化

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

Stack Overflow用户
提问于 2014-03-25 12:35:40
回答 2查看 384关注 0票数 1

全,

我希望你们大多数人都知道,在使用ios7时,不需要对tableview重用执行空检查。

代码语言:javascript
复制
if (cell == nil) {

但不幸的是,由于单元格总是被重新初始化,因为我们将代码放在初始化值的相同方法中。不过,问题只是表视图中的文本字段。

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

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-25 14:33:30

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

从MVC的角度来看,UITableViewCell是一个视图。由于它被iOS重用,所以您应该对视图使用一个模型。

票数 2
EN

Stack Overflow用户

发布于 2014-03-25 12:47:53

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

我从你的问题中不明白的是,你是否每次看到一个手机时都会打一个网络电话?如果是的话,将结果缓存在某个地方。或者,如果是少量的数据,可以考虑在一开始就一次完成(尽管仍然需要异步)。

我看到许多开发人员所做的一件事就是将大量代码迁移到UITableViewCell子类中,这听起来不错,因为它是模块化的,但是这样的问题更难解决。让表视图数据源管理网络调用。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22634806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档