首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cellForRow返回零-斯威夫特3

cellForRow返回零-斯威夫特3
EN

Stack Overflow用户
提问于 2017-01-27 16:15:39
回答 2查看 1.4K关注 0票数 0

我调用JSON并将数据保存在数组中,在重新加载tableView之后,当我使用dequeueReusableCell时一切正常,但是当我更改为cellForRow时,每次设置单元格时都会崩溃。使用cellForRow的原因是我需要在用户单击该单元格后更改它的图像,但是如果我使用dequeueReusableCell,则会得到多个更改(因为该单元格总是被重用)。

我在let cell = tableView.cellForRow(at: indexPath) as! TicketTableViewCell撞车了。我已经做了一次搜索,但没有任何帮助。

代码语言:javascript
复制
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.cellForRow(at: indexPath) as! TicketTableViewCell

    //let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TicketTableViewCell

    cell.date.text = arrDate[indexPath.row].date

    //Top Bottom Space.
    let maskLayer = CAShapeLayer()
    let bounds = cell.bounds
    maskLayer.path = UIBezierPath(roundedRect: CGRect(x: 2, y: 2, width: bounds.width-4, height: bounds.height-4), cornerRadius: 2).cgPath
    cell.layer.mask = maskLayer

    return cell
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-27 16:50:12

在数据源方法tableView(:cellForRowAt:)中,您不能使用tableView.cellForRow(at: indexPath),因为第二个方法只是返回以前在第一个方法中给出的单元格。

如果您有索引路径,它意味着从表视图中取回一个单元格。您不能绕过表视图的视图-重用,您必须使用dequeue。

如果问题是“获得多个更改(因为单元总是被重用)”,则需要确保单元格为重用做好了适当的准备,并且/或只设置了一次。

我不知道您的实现是什么,但是当您的视图控制器被调用时,当您的视图控制器被调用时,用户已经单击了该单元格(通过按钮或手势识别器),您应该传递该单元格本身,因为如果您拥有该单元格,您可以调用tableview.indexPathForCell()并知道单击了哪个indexPath,因此您将知道要用什么数据更新这个单元格。希望这能有所帮助。

编辑:(如果您想使用所有不同的单元格,则在跟踪的意义上,单元格是“选定的”,而不是单元格的selected属性)。您还应该跟踪当前选定的索引,并在数据源方法中以不同的格式设置单元格,以防用户在屏幕外滚动选定的单元格并将其返回。

让数据源方法检查是否选择了一个单元格很重要,因为它还允许您随意地重新加载任何您认为可能发生更改的单元格。但这不是很好的练习(但简单又好!)更好的是,如果您有单元格,您可以直接设置它的属性。

票数 1
EN

Stack Overflow用户

发布于 2017-01-27 16:21:29

回到使用dequeueReusableCell

didSelectRowAt中,更改要使用的映像,或在数据集中的某个位置设置值,然后重新加载该行

确保cellForRowAt方法使用您设置的更新图像或标志,并重新绘制单元格。

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

https://stackoverflow.com/questions/41898389

复制
相关文章

相似问题

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