我在ViewController中将这段代码命名为PlayViewController
:
var words = [String]()
var numberOfRevealedLabels = 1
var indexGA = 0
var indexWA = 0
override func viewDidLoad() {
super.viewDidLoad()
playTableView.delegate = self
playTableView.dataSource = self
view.isUserInteractionEnabled = true
let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
swipeRight.direction = .right
view.addGestureRecognizer(swipeRight)
let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
swipeLeft.direction = .left
view.addGestureRecognizer(swipeLeft)
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellIdentifier = "PlayTableViewCell"
guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? PlayTableViewCell else {
fatalError("The dequeued cell is not an instance of PlayTableViewCell.")
}
cell.wordLabel.text = words[indexPath.row]
var count = 0
while (count < words.count)
{
if (indexPath.row == count) {
if (count == 0) {
cell.wordLabel.isHidden = false
}
if (indexGA - 1 == count) {
cell.wordLabel.textColor = UIColor.green
} else if (indexWA - 1 == count) {
cell.wordLabel.textColor = UIColor.red
}
}
count += 1
}
cell.wordLabel.isHidden = !(indexPath.row <= numberOfRevealedLabels - 1)
return cell
}
@objc func respondToSwipeGesture(gesture: UIGestureRecognizer) {
if let swipeGesture = gesture as? UISwipeGestureRecognizer {
switch swipeGesture.direction {
case UISwipeGestureRecognizer.Direction.right:
indexGA = numberOfRevealedLabels
numberOfRevealedLabels += 1
playTableView.reloadData()
case UISwipeGestureRecognizer.Direction.left:
indexWA = numberOfRevealedLabels
numberOfRevealedLabels += 1
playTableView.reloadData()
default:
break
}
}
}
因此,基本上,该应用执行以下操作:
numberOfRevealedLabels
对当前显示的单词数进行计数,indexGA
有助于跟踪单词变成绿色的位置,对于indexWA
来说则红色。当我向下滚动以阅读下一个单词时(我开始在第十二个单词上滚动),它的提示颜色与前一个单词相同(如果向右滑动则为绿色,向左滑动则为红色)。另外,列表的第一个单词会随机更改其颜色(黑色,绿色或红色)。
我已经读过these ones之类的线程,我知道这是因为dequeueReusableCell
造成的。
我的代码没有else
条件。当添加一个以将.textColor
设置为黑色时,除最后两个单词外所有单词均变为黑色。
要修复else
语句,我可以编写如下代码:
else {
if (cell.wordLabel.textColor == UIColor.green) {
cell.wordLabel.textColor = UIColor.green
} else if (cell.wordLabel.textColor == UIColor.red) {
cell.wordLabel.textColor = UIColor.red
} else {
cell.wordLabel.textColor = UIColor.black
}
}
不幸的是,它没有解决我的问题,单元格中的标签不断以一种怪异的方式改变颜色(此外,它在一个不太逻辑的循环中添加了更多的丑陋的LOC)。
我最近尝试过的方法是:在wordLabel.textColor = UIColor.black
中设置PlayTableViewCell.swift
,但没有解决任何问题。
我没有主意/逻辑,任何帮助将不胜感激!
答案 0 :(得分:0)
您应该在致电cell.wordLabel.textColor = UIColor.black
之后立即设置cell.wordLabel.text = words[indexPath.row]
。
所以它应该像这样:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellIdentifier = "PlayTableViewCell"
guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? PlayTableViewCell else {
fatalError("The dequeued cell is not an instance of PlayTableViewCell.")
}
cell.wordLabel.text = words[indexPath.row]
cell.wordLabel.textColor = UIColor.black //HERE
var count = 0
while (count < words.count)
{
if (indexPath.row == count) {
if (count == 0) {
cell.wordLabel.isHidden = false
}
if (indexGA - 1 == count) {
cell.wordLabel.textColor = UIColor.green
} else if (indexWA - 1 == count) {
cell.wordLabel.textColor = UIColor.red
}
}
count += 1
}
cell.wordLabel.isHidden = !(indexPath.row <= numberOfRevealedLabels - 1)
return cell
}
添加else
不能解决问题,因为它放在嵌套的if statement
中。具有颜色的单元格仍可以重复使用,因为您没有在任何if statements
之前设置默认颜色。除非满足条件,否则将其添加到所有if statements
之外将确保颜色始终为黑色。