iOS Swift 如何更改或更新自定义 UITableViewCell 中的 UILabel 属性

Posted

技术标签:

【中文标题】iOS Swift 如何更改或更新自定义 UITableViewCell 中的 UILabel 属性【英文标题】:iOS Swift How to change or update UILabel attribute in custom UITableViewCell 【发布时间】:2016-08-24 07:08:36 【问题描述】:

当我从 Web 服务获取数据时,我想动态更新/更改 UILabel 属性(背景颜色、背景形状等)。

我想通过不同的标签文本以不同的类型显示这个标签,根据从网络服务器获取的测试数据更新 UILabel 属性。像这样:如果 get testdata=[1,1,1,1] UIlabel 背景颜色是红色, testdata=[2,2,2,2] UILabel 背景颜色是蓝色.etc

我正在做以下事情:

在 Main.Stroyboard 中:

我添加了 TableView 和 TableViewCell(选择自定义)关联 UITableViewCell 命名为 TVcell 并添加了一个 UILabel 组件。

在 TVcell 中

import UIKit
class TVCell: UITableViewCell 

    @IBOutlet weak var testLabel: UILabel!

    var testdata:TestDataInfo?
        didSet
            updateUI()
        
    

    private func updateUI()
        if let mFildata=testdata
            setStautesLabel()
        
    

    private func setStautesLabel()
        self.testLabel=UILabel(frame: CGRect(x: 50, y: 50, width: 100, height: 35))
        self.testLabel.text = "thisTestLabel"

        self.testLabel.transform = CGAffineTransformMakeRotation(0.2)
        self.superview?.addSubview(self.testLabel)
    

方法一:在TableViewController中

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let data = TestDataInfo![indexPath.row]
    let cell = self.TV.dequeueReusableCellWithIdentifier(Storyboard.ProjectAppliedCellIndentifier,forIndexPath: indexPath)
    if let filesDataCell = cell as? TVCell
        filesDataCell.testdata=data
    
    return cell

结果 1

Just One Cell testLabel 已更改,其余 Cell 无显示 testLabel

方法2:在TableViewController中

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let data = TestDataInfo![indexPath.row]
    let cell = self.TV.dequeueReusableCellWithIdentifier(Storyboard.ProjectAppliedCellIndentifier,forIndexPath: indexPath)
    if let filesDataCell = cell as? TVCell
        filesDataCell.testdata=data
        // update testLable In there
        let testLable:UILabel=UILabel(frame: CGRect(x: 50, y: 50, width: 100, height: 35))
        testLable.text = "thisLabel"
        testLable.transform = CGAffineTransformMakeRotation(0.2)
        cell.contentView.addSubview(testLable)
    
    return cell

结果 2

可以在所有单元格中显示TestUILabel。但不更新 testLabel 原来的只是添加新的 UILabel

但是为什么?我想更新 TVCell 中的所有 UILable。谁能帮帮我?

【问题讨论】:

updateUI 意味着我想通过不同的 Lable 文本以不同的类型显示它,我写过我想根据从 Web 服务器获得的测试数据更新 UILabel 属性。像这样:如果 get testdata=1 UIlabel 背景颜色为红色,testdata=2 UILabel 背景颜色为 blue.etc 【参考方案1】:

不要在 TableViewController 中创建新的 testLabel 实例。可以通过filesDataCell.testLabel在TableViewController中直接访问;由于单元格被重复使用,添加新标签将继续添加新标签,而不会丢弃以前的标签。

【讨论】:

好的,但是有任何方法在TVcell(TaleviewCell类)中更新它 @sach,“添加新标签将继续添加新标签而不会丢弃以前的标签。”,动态创建标签或基于 UITableVIew 中的模型数据计数的最佳解决方案是什么?

以上是关于iOS Swift 如何更改或更新自定义 UITableViewCell 中的 UILabel 属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中使用 googleMaps 更新我的位置自定义标记

更改自定义文本字段背景颜色和文本颜色IOS Swift

iOS 中 annotationView 中的自定义 pin 图像

iOS Swift:在自定义 UITableView 单元格中更新二维数组时获取重复值

UISlider 的自定义形状并在 Swift 5 中更新进度

在ios的uitableview中自定义单元格编辑样式