我在每个单元格中都有一个带有textView的tableView。 当用户“拉动刷新”tableView时 - 实现了更改textView文本颜色的功能。 它并不总是有效 - 当textView包含超过4个英文数字\字母时 - 它不会改变颜色,任何其他语言或者如果它少于4个字符 - 它的工作原理! 我的代码与数字/字母/更多或更少字符的限制无关。
看起来像这样:
单元格1:少于5个字符。
Cell 2& 3:超过4个字符&用英语讲。
这是我的代码:
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)
}
答案 0 :(得分:0)
正如您在提供的代码部分中提到的那样,没有字符限制或语言的痕迹,因此我认为您的问题不是由此造成的,除非您的代码的另一部分不是告诉我们。
让我们假设你没有。你说你的刷新和你的颜色变化不是“总是”工作。因此,您的代码实现中可能存在错误。让我们浏览它。
我认为colorNumber
和currentColor
是整个控制器的全局变量。 意味着您的代码中可能会被多个函数或逻辑修改=可能的错误值=您的文本可能显示错误的颜色。
您初始化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()
}
刷新控件。这对我来说似乎很正常。 尝试控制两个全局变量viewDidLoad
和colorNumber
的值。打印它们的值并尝试了解如何在代码流中修改它们的值。
建议:当你使用两个开关和基本相同的情况时,你可以创建一个这样的枚举:
currentColor
它更具可读性和简洁性,如果您想要更进一步,可以将值与您的枚举相关联:Enumerations