由于字符数量的原因,TextView的文本颜色不会更改

时间:2017-10-22 11:40:18

标签: ios swift uitableview

我在每个单元格中都有一个带有textView的tableView。 当用户“拉动刷新”tableView时 - 实现了更改textView文本颜色的功能。 它并不总是有效 - 当textView包含超过4个英文数字\字母时 - 它不会改变颜色,任何其他语言或者如果它少于4个字符 - 它的工作原理! 我的代码与数字/字母/更多或更少字符的限制无关。

看起来像这样:

单元格1:少于5个字符。

Cell 2& 3:超过4个字符&用英语讲。 enter image description here

这是我的代码:

    var colorNumber = 1
    var currentColor = UIColor()
    var refreshControl: UIRefreshControl!

func colors() {
    switch colorNumber {
            case 1: currentColor = UIColor(red: 252/255, green: 244/255, blue: 250/255, alpha: 1)
            case 2: currentColor = UIColor(red: 0/255, green: 200/255, blue: 100/255, alpha: 1)
            default: currentColor = UIColor(red: 100/255, green: 28/255, blue: 37/255, alpha: 1)
    }
            tableView.reloadData()
    }

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
      let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! notesTableViewCell
    cell.textView.tag = indexPath.row
    cell.textView.isEditable = false
    cell.textView.isSelectable = false
    cell.textView.text = contentInNotes[indexPath.row]
    cell.textView.textColor = currentColor
    cell.textView.backgroundColor = .clear
}

func refreshColor(sender:AnyObject) {
        switch colorNumber {
        case 1:
            colorNumber = 2
        case 2:
            colorNumber = 3
        case 3:
            colorNumber = 1
        default:
            colorNumber = 1
        }
        colors()
        refreshControl.endRefreshing()
    }
    override func viewDidLoad() {
        super.viewDidLoad()

refreshControl = UIRefreshControl()
        refreshControl.attributedTitle = NSAttributedString(string: "Pull to Change Colors")
        refreshControl.addTarget(self, action: #selector(refreshColor(sender:)), for: UIControlEvents.valueChanged)
        tableView.addSubview(refreshControl)
    }

1 个答案:

答案 0 :(得分:0)

正如您在提供的代码部分中提到的那样,没有字符限制或语言的痕迹,因此我认为您的问题不是由此造成的,除非您的代码的另一部分不是告诉我们。

让我们假设你没有。你说你的刷新和你的颜色变化不是“总是”工作。因此,您的代码实现中可能存在错误。让我们浏览它。

我认为colorNumbercurrentColor是整个控制器的全局变量。 意味着您的代码中可能会被多个函数或逻辑修改=可能的错误值=您的文本可能显示错误的颜色。

您初始化colorNumber = 1,但为什么要将currentColor初始化为UIColor()。根据您的逻辑,我将使用UIColor(red: 252/255, green: 244/255, blue: 250/255, alpha: 1)初始化它,对应于func colors()中colorNumber等于1的情况。然后,您重新加载表数据似乎没问题。你正在将你的细胞出列似乎也很正常。无话可说。

然后在您的函数func refreshColor(sender:AnyObject)中,您有一个带有 4种可能情况的开关:1,2,3和默认情况。对我而言,您的函数中只有3个案例{{1}用1,2和默认值。 为什么你用colorNumber = 3添加第三个案例?对我来说,你只需要像这样编写这个函数:

colors()

最后,添加func refreshColor(sender:AnyObject) { switch colorNumber { case 1: colorNumber = 2 case 2: colorNumber = 3 default: colorNumber = 1 } colors() refreshControl.endRefreshing() } 刷新控件。这对我来说似乎很正常。 尝试控制两个全局变量viewDidLoadcolorNumber 的值。打印它们的值并尝试了解如何在代码流中修改它们的值。

建议:当你使用两个开关和基本相同的情况时,你可以创建一个这样的枚举: currentColor 它更具可读性和简洁性,如果您想要更进一步,可以将值与您的枚举相关联:Enumerations