如何更改表格视图中的标签文本颜色(存储在数组中的数据)

Posted

技术标签:

【中文标题】如何更改表格视图中的标签文本颜色(存储在数组中的数据)【英文标题】:How to change label text color in tableview (data stored in an array) 【发布时间】:2018-01-01 11:12:09 【问题描述】:

我有一个表格视图,它显示来自存储在数组 var lastDayChange = [String]() 中的 JSON 的数据,如果结果低于 0(如 -1 或 -2 等),我想让标签文本颜色为红色,如果结果高于 0(如 1 或 2 等);如下图:

我在同一个 ViewController.swift 文件中创建这个类:

struct Coin: Codable 
let symbol : String
let price_usd : String
let percent_change_24h : String

这是我的表格视图:

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

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

    let lineNumbers = Array(1...200)

    cell.lineNumberLable.text =  " \(lineNumbers[indexPath.row]) -"

    cell.coinNameLable.text = sympolsCoin[indexPath.row]

    cell.priceLable.text = "$" + priceUSDcoin[indexPath.row]

    cell.lastDayChange.text = lastDayChange[indexPath.row] + "%"

    //cell.coinLogoImage.image = UIImage(named : cryptoCurrencyImage[indexPath.row])

    return cell


还有这个带有数组保存数据的json:

var coins = [Coin]()

var sympolsCoin = [String]()
var priceUSDcoin = [String]()
var lastDayChange = [String]()



func getCoinData() 
    let jsonURL = "https://api.coinmarketcap.com/v1/ticker/"
    let url = URL(string: jsonURL)


    URLSession.shared.dataTask(with: url!)  (data, response, error) in

        do 
            self.coins = try JSONDecoder().decode([Coin].self, from: data!)

            for info in self.coins 
                self.sympolsCoin.append(info.symbol)
                self.priceUSDcoin.append(info.price_usd)
                self.lastDayChange.append(info.percent_change_24h)

                DispatchQueue.main.async 
                    self.coinTableView.reloadData()
                
                //self.coinTableView.reloadData()
            
        catch 
            print("Error is : \n\(error)")
        
     .resume()

【问题讨论】:

可以分享项目。我会直接在你的项目中实现。 【参考方案1】:

你可以这样在tableView(_:cellForRowAt:)里面做:

cell.lastDayChange.textColor = Float(lastDayChange[indexPath.row])! >= 0 ? .green : .red

首先,您在indexPath 处获取lastDayChange 的项目并将其从String 转换为Int,并根据该项目的值设置标签颜色。

【讨论】:

错误:二元运算符“>=”不能应用于“Int”类型的操作数?和“诠释” 我更新了我的答案,你需要解开投射结果。 错误:线程 1:致命错误:在展开可选值时意外发现 nil 所以您的lastDayChange 数组包含无法转换为Int 的字符串。 我的数组只有数字!【参考方案2】:

你可以通过这个属性改变UILabel对象的文字颜色。

cell.priceLable.textColor = .red

【讨论】:

请阅读问题,他要求更改lastDayChange颜色而不是priceLablecolour josh gray 请仔细阅读问题然后回答。谢谢。【参考方案3】:

你可以在 tableView(_:cellForRowAt:) 里面做:

if(lastDayChange[indexPath.row] >= 0)

 cell.lastDayChange.textColor = UIColor.green
 else 

 cell.lastDayChange.textColor = UIColor.red

希望它的工作......

【讨论】:

【参考方案4】:

CellForAt 中添加以下代码行

if lastDayChange[indexPath.row] > 0 
    cell.lastDayChange.textColor = .green
 else 
    cell.lastDayChange.textColor = .red

【讨论】:

错误:二元运算符“>”不能应用于“字符串”类型的操作数 OK 所以 lastDayChange 是字符串。所以你必须将字符串转换为双精度。 if(Double(lastDayChange[indexPath.row] )> 0) cell.lastDayChange.textColor = UIColor.green else cell.lastDayChange.textColor = UIColor.red

以上是关于如何更改表格视图中的标签文本颜色(存储在数组中的数据)的主要内容,如果未能解决你的问题,请参考以下文章

单击表格视图中的按钮时如何更改表格视图外部的标签文本

如何延迟更改 tableView 中的 UILabel 文本

更改 UITableView 中一些选定的表格视图单元格文本的颜色

文本字段标签和表格视图

如何根据标签文本快速更改表格视图单元格高度?

在点击其各自的父项(列表视图的项目)后,如何更改标签的文本颜色?