【问题标题】:iOS Swift How to change or update UILabel attribute in custom UITableViewCelliOS Swift 如何更改或更新自定义 UITableViewCell 中的 UILabel 属性
【发布时间】: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

标签: ios uitableview


【解决方案1】:

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

【讨论】:

  • 好的,但是有任何方法在TVcell(TaleviewCell类)中更新它
  • @sach,“添加新标签将继续添加新标签而不会丢弃以前的标签。”,动态创建标签或基于 UITableVIew 中的模型数据计数的最佳解决方案是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多