我试图进行测验,所以当你点击nextButton
时,它会检查问题是否正确,是否应该使细胞变绿,如果错误则应该chosenCell
红色和correctCell
绿色。然而,它似乎继续重新标记标签而不是使细胞正确的颜色。这是一个例子,当我选择正确的一个。它使第一个单元格的textColor变为白色并重置正确的标签?
插图
的cellForRowAtIndexPath
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if indexPath.section == 0 {
let cell = tableView.dequeueReusableCellWithIdentifier("ButtonCell", forIndexPath: indexPath) as! QuestionCell
cell.titleLabel.text = options[indexPath.row]
return cell
} else {
let cell = tableView.dequeueReusableCellWithIdentifier("NextCell", forIndexPath: indexPath) as! NextCell
if colorCheck > 186 {
cell.nextButton.backgroundColor = UIColor(rgba: quizObject!.navButtonsColor)
} else {
cell.nextButton.backgroundColor = UIColor(rgba: quizObject!.navBarColor)
}
cell.nextButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
cell.nextButton.addTarget(self, action: "done", forControlEvents: UIControlEvents.TouchUpInside)
cell.selectionStyle = UITableViewCellSelectionStyle.None
return cell
}
}
didSelectRowAtIndexPath并完成
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
chosenIndex = indexPath.row
}
func done() {
if chosenIndex != nil {
tableView?.deselectRowAtIndexPath(NSIndexPath(forRow: chosenIndex!, inSection: 0), animated: true)
let cell = tableView!.dequeueReusableCellWithIdentifier("ButtonCell", forIndexPath: NSIndexPath(forRow: chosenIndex!, inSection: 0)) as! QuestionCell
cell.titleLabel.textColor = UIColor.whiteColor()
let cell2 = tableView!.dequeueReusableCellWithIdentifier("ButtonCell", forIndexPath: NSIndexPath(forRow: correctIndex, inSection: 0)) as! QuestionCell
cell2.titleLabel.textColor = UIColor.whiteColor()
if chosenIndex! == correctIndex {
cell.backgroundColor = UIColor.greenColor()
} else {
cell.backgroundColor = UIColor.redColor()
cell2.backgroundColor = UIColor.greenColor()
}
tableView?.reloadData()
}
}
答案 0 :(得分:1)
首先:你正在滥用出局机制。如果您想获得现有的单元格,请使用
tableView(_:cellForRowAtIndexPath:)
其次,你不应该在if indexPath.section == 0 {
let cell = tableView.dequeueReusableCellWithIdentifier("ButtonCell", forIndexPath: indexPath) as! QuestionCell
cell.titleLabel.text = options[indexPath.row]
if let chosen = chosenIndex {
if chosen == indexPath.row {
if indexPath.row == correctIndex {
cell.backgroundColor = UIColor.greenColor()
} else {
cell.backgroundColor = UIColor.redColor()
}
} else {
if indexPath.row == correctIndex {
cell.backgroundColor = UIColor.greenColor()
} else {
cell.backgroundColor = UIColor.whiteColor()
}
}
} else {
cell.backgroundColor = UIColor.whiteColor()
}
return cell
}
内部以外的任何地方操纵单元格。原因是如果UITableView决定重新加载其内容,那么仅在上述方法之外完成的所有更改都将丢失。
您必须改变支持状态并手动重新加载受影响的行。
您必须将当前的逻辑更改为
func done()
在tableView
中,您只需告诉brew install leiningen
正确的行:
请注意,我省略了设置textColor属性,因为它们的逻辑类似于backgroundColor,我认为你可以而且应该弄清楚如何正确设置它们。