从Tableview中的第0节中删除按钮

时间:2018-03-22 17:29:25

标签: ios swift xcode uitableview

我有一个包含4个部分的tableview。在2,3和4节中,我想要一个+按钮来向" Saved"添加信息。阵列。我有添加信息的逻辑设置,但我遇到了tableview单元的问题。

我不希望+按钮出现在第0部分,因为我们正在添加数据。这是我的cellForRowAt方法...

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

    // Configure the cell...

    if indexPath.section == 0 {
        cell.textLabel?.text = "Test"
        cell.addFavoritesButton.removeFromSuperview()
    } else if indexPath.section == 1 {
        cell.textLabel?.text = Items.sharedInstance.elementaryList[indexPath.row]
    } else if indexPath.section == 2 {
        cell.textLabel?.text = Items.sharedInstance.intermediateList[indexPath.row]
    } else if indexPath.section == 3 {
        cell.textLabel?.text = Items.sharedInstance.highschoolList[indexPath.row]
    }
    return cell

这首先很棒!但是,如果我向下滚动,越来越多的单元格将删除该按钮。由于可重复使用的细胞,它不限于第0部分。

有人能想到更好的方法只删除第一部分的这个按钮吗?

Screenshot of section 0

Screenshot of section 1

3 个答案:

答案 0 :(得分:2)

首次运行正确显示单元格,因为所有单元格都是单元格类的新实例(没有重复使用),但滚动后显示的单元格可能会重复使用,这个重用的单元格可能是第0部分中删除的单元格按钮,你可以尝试显示/隐藏它

 if indexPath.section == 0 {
    cell.textLabel?.text = "Test"
    cell.addFavoritesButton.isHidden = true
} 
else
{
   cell.addFavoritesButton.isHidden = false
}

答案 1 :(得分:2)

您忘记了细胞被重复使用。每次通过cellForRowAt时,您都需要处理此单元格已经具有以前使用的按钮的可能性,并且不应该在此用途中使用该按钮,或者它可能缺少按钮并且需要它这个用途。

例如,您不能假设仅因为该部分为1,该单元格具有该按钮,因为它可能已在之前的0部分中使用过,现在缺少该按钮。在这种情况下,您需要添加它。但你不是那样做的。

因此,对于逻辑的每个分支,您必须明确是否添加或删除按钮。如果你真的要添加和删除它,那可能会变得复杂。您需要在某处保留按钮的副本,以便添加它。你要确保不要将它两次添加到同一个单元格。如果已经删除它,请确保不要尝试删除它。

正如在另一个答案中所建议的那样,处理此问题的简单方法不是添加和删除,而是根据此部分是否为{{1来使按钮的可见性 }}:

0

这是一行代码,它更好地完成了你想要做的事情。

答案 2 :(得分:1)

通过调用cell.addFavoritesButton.removeFromSuperview()从单元格中删除按钮后,在重复使用单元格时,不会再次添加该按钮。您应该将按钮保留在单元格上,但使用

隐藏它
cell.addFavoritesButton.isHidden = indexPath.section == 0

或添加新功能,让最终用户从第0部分中删除项目,并将按钮上的图片从+更改为-

enter image description here