向单元格动态添加视图会在表格中产生问题

     2023-02-27     139

关键词:

【中文标题】向单元格动态添加视图会在表格中产生问题【英文标题】:Add view dynamically to cells produce issues in table 【发布时间】:2018-04-06 17:01:11 【问题描述】:

我有这个功能:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier)!

        let label = UILabel(frame: CGRect(x: 100, y: 14, width: 400, height: 30))
        label.text = "\(data[indexPath.row])"
        label.tag = indexPath.row
        cell.contentView.addSubview(label)

        return cell
    

嗯,通过这个函数,我可以动态添加行列表。 为什么是动态的?因为,列数取决于数据。 不要把注意力放在那个上面。

列表有 244 个元素。 结果显示正常,但是一旦我开始滚动,我就会得到:

如何动态添加元素而不出现此错误?

【问题讨论】:

uitableview 在向下滚动时创建 10 个单元格重新创建单元格视图,您可以在 addsubview 之前使用 cell.contentView.removeFromSuperview() 或使用 cell.textLabel?.text 如果您将其添加为答案,我会将其标记为正确的@a.masri 【参考方案1】:

细胞被重复使用。您不断为每个单元格添加越来越多的标签。

正确的解决方案是创建一个包含所需标签的自定义单元格类。然后只需在cellForRowAt 中设置该标签的文本。不要在cellForRowAt 中创建和添加子视图。

但请记住,您可能只想使用UITableViewCell 提供的textLabel 属性。无需自定义单元格或您自己的标签。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier)!
    cell.textLabel?.text = "\(data[indexPath.row])"

    return cell

【讨论】:

【参考方案2】:

我找到了解决办法,希望对你有用!!!

您必须将此代码添加到您的cellForRowAt

for item in cell.contentView.subviews
    
        item.removeFromSuperview()
    

刚拿到单元格。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier)!

    for item in cell.contentView.subviews
    
        item.removeFromSuperview()
    

    let label = UILabel(frame: CGRect(x: 100, y: 14, width: 300, height: 30))
    label.text = "\(data[indexPath.row])"
    label.tag = indexPath.row

    let btn = UIButton(type: UIButtonType.custom) as UIButton
    btn.backgroundColor = UIColor.red
    btn.setTitle("boton", for: .normal)
    btn.frame = CGRect(x:0, y:5, width: 80, height:40)
    //btn.addTarget(self, action: "buttonPressed:", for: UIControlEvents.touchUpInside)
    btn.tag = indexPath.row
    cell.contentView.addSubview(btn)
    cell.contentView.addSubview(label)

    cell.tag = indexPath.row

    return cell

【讨论】:

这不是一个好的解决方案。自定义单元格是一种更好的方法。 @maddy,我知道,这只是学习更多关于 swift 的练习的一部分。这就是我在“不要专注于方法”中写的原因,但是,是的,你说得对! custom cell 是更好的方法【参考方案3】:

UITableview 在向下滚动时创建 10 个单元格重新创建单元格视图

您可以使用 cell.contentView.removeFromSuperview()cell.contentView.addSubview(label) 之前或使用cell.textLabel?.text

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier)!
        cell.contentView.removeFromSuperview()
        let label = UILabel(frame: CGRect(x: 100, y: 14, width: 400, height: 30))
        label.text = "\(data[indexPath.row])"
        label.tag = indexPath.row
        cell.contentView.addSubview(label)

        return cell
    

注意此解决方案将删除单元格中的所有子视图

【讨论】:

这段代码有一个严重的错误。此代码实际上删除了单元格的contentView。不要那样做。这真的很糟糕。您只想删除添加到 contentView 的标签。 @rmaddy 是的,他已经得到了这个,但他只是想确保这项工作的质量,自定义单元格是更好的方法 我不明白你的评论。您发布了具有严重错误的代码。它需要修复。 这只是学习更多关于 swift 的练习的一部分。所以他想问的用户 发布有致命缺陷的代码如何帮助任何人学习?请记住,随着时间的推移,您的答案将被其他人复制和粘贴。您只需要修复一行代码。以正确的方式为您的答案感到自豪。

将文本字段动态添加到表格视图单元格并水平滚动

】将文本字段动态添加到表格视图单元格并水平滚动【英文标题】:Addingtextfielddynamicallytotableviewcellandscrollithorizontally【发布时间】:2015-05-0413:40:02【问题描述】:我创建了一个横向显示的表格视图。我想向表格单元格动态添加... 查看详情

如何向 UICollectionView 动态添加新单元格?

】如何向UICollectionView动态添加新单元格?【英文标题】:HowtoDynamicallyAddNewCellsToUICollectionView?【发布时间】:2019-07-1015:24:30【问题描述】:假设一个集合视图(或表格视图)的部分属性中的项目数已设置为10(即,在一个部分中... 查看详情

向每个表格视图单元格添加数字 - iOS

】向每个表格视图单元格添加数字-iOS【英文标题】:Addnumberstoeachtableviewcell-iOS【发布时间】:2014-02-0119:37:47【问题描述】:在我的应用程序中,我想通过按数字顺序添加数字来显示表格视图中有多少个单元格。例如,我希望表... 查看详情

向动态视图单元格添加另一个字幕

】向动态视图单元格添加另一个字幕【英文标题】:Addanothersubtitletodynamicviewcell【发布时间】:2013-09-0602:42:21【问题描述】:快速提问。我正在尝试在原型单元格中添加另一个单元格。我添加了行“cell.textLabel.text=person.firstname;”... 查看详情

iOS - 向表格视图单元格添加水平填充

】iOS-向表格视图单元格添加水平填充【英文标题】:iOS-addhorizontalpaddingtotableviewcells【发布时间】:2013-10-2903:31:13【问题描述】:我想为我的表格视图单元格添加水平填充,如图所示。我创建了UITableViewCell的子类,其宽度为314像... 查看详情

iPhone:向 Cell ContentView 添加子视图会在滚动时覆盖单元格文本

】iPhone:向CellContentView添加子视图会在滚动时覆盖单元格文本【英文标题】:iPhone:AddingsubviewstoCellContentViewoverwritescelltextsonscrolling【发布时间】:2011-06-1611:06:08【问题描述】:我在我的实现中使用了Cell.ContentView来自定义单元格内... 查看详情

如何添加“加载更多”单元格,按下该单元格时会向表格视图添加更多行?

】如何添加“加载更多”单元格,按下该单元格时会向表格视图添加更多行?【英文标题】:Howtoadda"LoadMore"cellthatwhenpressedaddsmorerowstothetableview?【发布时间】:2017-02-2722:42:44【问题描述】:我正在尝试创建一个表格视图,... 查看详情

无法添加一致的高度和填充。动态表格视图单元格之间

】无法添加一致的高度和填充。动态表格视图单元格之间【英文标题】:Unabletoaddconsistentheightandpadding.betweendynamictableviewcells【发布时间】:2017-03-1818:57:32【问题描述】:我正在尝试实现一个表格视图,该表格视图的左侧有一个产... 查看详情

向每个表格视图单元格添加一个数字选择器

】向每个表格视图单元格添加一个数字选择器【英文标题】:Addinganumberpickertoeachtableviewcell【发布时间】:2013-09-1014:14:48【问题描述】:我对iOS开发非常陌生。目前,我正在尝试开发一个iPad应用程序,用于在餐厅接受订单。UI应... 查看详情

以编程方式向表格视图单元格添加按钮[关闭](代码片段)

我可以在表视图中添加和删除单元格。如何为每个添加的单元格设置两个按钮?答案将按钮添加为单元格的子视图。而已。我给了样品://CreateyourcellthendothefollowingUIButton*newBtn=[UIButtonbuttonWithType:UIButtonTypeCustom];[newBtnsetFrame:CGRectMake... 查看详情

在静态表格视图(单元格)中实现动态表格

】在静态表格视图(单元格)中实现动态表格【英文标题】:Implementadynamictablewithinastatictableview(cell)【发布时间】:2016-03-0820:45:56【问题描述】:所以到目前为止,我基本上已经实现了一个静态表,并且在底部我想为活动的参与... 查看详情

表格单元格视图中的多个标签

】表格单元格视图中的多个标签【英文标题】:Multiplelabelsinatablecellview【发布时间】:2010-03-1910:52:29【问题描述】:我想在一个单元格中动态添加三个标签,单元格也是动态创建的,但我不知道如何创建标签并将其添加到Objective... 查看详情

在表格视图单元格中动态调整子视图的大小

】在表格视图单元格中动态调整子视图的大小【英文标题】:Resizingasubviewdynamicallyintableviewcell【发布时间】:2015-04-0705:35:58【问题描述】:我有一个关于在tableViewCell中添加子视图的小问题。我的单元格背景从百分比计数来看是... 查看详情

表格视图单元格的按钮与其他单元格混淆?

】表格视图单元格的按钮与其他单元格混淆?【英文标题】:Tableviewcell\'sbuttonmesseswithothercells?【发布时间】:2011-10-1200:29:33【问题描述】:好的,我有一个可以添加和删除单元格的表格视图。对于添加的每个单元格,它会在单... 查看详情

重用表格视图单元格时出现问题?

】重用表格视图单元格时出现问题?【英文标题】:Issuewhilereusingtableviewcell?【发布时间】:2014-07-1110:58:38【问题描述】:在我的UITableView中,我添加了滑动UISwipeGestureRecognizer到单元格。所以当我在任何单元格上滑动时,它会在该... 查看详情

动态表格视图单元格,以编程方式更改子视图高度

】动态表格视图单元格,以编程方式更改子视图高度【英文标题】:Dynamictableviewcell,changeofsubviewheightprogrammatically【发布时间】:2015-09-1704:40:24【问题描述】:我有一个带有自定义视图单元格的UITableViewCell。在这个视图单元格中... 查看详情

动画在具有动态单元格高度的单元格中添加子视图

】动画在具有动态单元格高度的单元格中添加子视图【英文标题】:Animateaddingasubviewinacellwithdynamiccellheight【发布时间】:2017-05-2716:53:32【问题描述】:我想为单元格中子视图的addSubview设置动画。表格视图单元格具有动态高度,... 查看详情

iOS动态地将新单元格加载到表格视图的底部

】iOS动态地将新单元格加载到表格视图的底部【英文标题】:iOSdynamicallyloadnewcelltothebottomofatableview【发布时间】:2012-03-2012:29:34【问题描述】:我正在开发一个iOS项目,我想在用户到达底部时动态地将更多单元格添加到tableview的... 查看详情