首页 > 解决方案 > 如何根据不同的条件在单个表格视图中以不同的方式使用相同的自定义单元格?

问题描述

我有一个表格视图和一个自定义单元格。我有 3 个用户在上一个屏幕中选择的条件(成人、儿童和婴儿的数量)。

我如何根据成人、儿童和婴儿的数量在表格视图中显示自定义单元格。(假设用户选择 1 名成人、2 名儿童和 3 名婴儿)细胞计数工作正常。我得到的细胞总数符合预期。

我尝试使用类似的东西

我在 tableviewcontroller 中声明了 3 个变量 adultcounttb 、 childcounttb 、 infantcounttb 。

我从上一个屏幕获得了成人计数、儿童计数和婴儿计数

if(adultcounttb < adultcount )
{
let cell =  (declaring)
cell.titlelabel.text = "adult"
adultcounttb  += 1
return cell
}
else if (childcounttb < childcountt)
{
let cell =  (declaring)
cell.titlelabel.text = "child"
childcounttb += 1
return cell
}
else if .....



}
else
{
return UITableviewcell()
}

This works as intended but whenever i scroll , the cells just disappears and becomes blank ( i know its because the else part is getting called) . How can i fix it so that the cells dont disappear or go blank when tableview gets scrolled?

标签: swiftuitableview

解决方案


您似乎正在实现一个表格视图,就好像您正在编写一个 C 风格的 for 循环,XXXcounttb变量作为计数器。你不应该这样做。

在该cellForRowAtIndexPath方法中,您将获得一个indexPath并且您应该返回一个应该位于该索引路径的单元格。您的代码甚至不关心索引路径。这是一个很大的指标,表明你做错了什么。

事实上,您可以通过查看给定的索引路径和XXXcount从前一个 VC 传递的变量来计算应该返回哪个单元格。你根本不需要XXXcounttb变量。

假设您在一个部分中显示所有单元格,您可以这样做:

if indexPath.row < adultCount {
    // return an adult cell
} else if indexPath.row < adultCount + childCount {
    // return a child cell
} else {
    // return an infant cell
}

如果您在不同的部分显示每种类型的单元格,那就更容易了:

if indexPath.section == 0 {
    // return an adult cell
} else if indexPath.section == 1 {
    // return a child cell
} else {
    // return an infant cell
}

推荐阅读