我有一些问题和答案
将问题放入一个数组并回答一个数组。
我想在用户选择问题时显示,再次显示答案,然后选择关闭答案。
我编写了以下代码,但是当一个答案打开时,所有答案都关闭了,我的逻辑是相反的,任何一个plz都对我有帮助。
在这里,我创建一个带有selectedindex名称的全局变量
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "DonationTableViewCell", for: indexPath)as!
DonationTableViewCell
cell.questioncell.text = questnArr[indexPath.row]
if indexPath.row == selectedindex
{
cell.answerlbl.text = answersarr[indexPath.row]
cell.questioncell.textColor = UIColor.disSatifyclr
cell.questionimg.image = #imageLiteral(resourceName: "Drop down top icon")
}else{
cell.answerlbl.text = ""
cell.questioncell.textColor = UIColor.textmaincolor
cell.questionimg.image = #imageLiteral(resourceName: "Drop down")
}
tableviewheight.constant = tableview.contentSize.height
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selectedindex = indexPath.row
tableView.reloadData()
}
答案 0 :(得分:1)
首先将selectedindex
声明为可选IndexPath
var selectedIndexPath : IndexPath?
在didSelectRowAt
中,您必须执行一些检查:
selectedIndexPath == nil
选择indexPath
处的行selectedIndexPath != nil
和selectedIndexPath == indexPath
取消选择indexPath
处的行selectedIndexPath != nil
和selectedIndexPath != indexPath
取消选择selectedIndexPath
的行,然后选择indexPath
的行。func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if selectedIndexPath == nil {
selectedIndexPath = indexPath
tableView.reloadRows(at: [indexPath], with: .automatic)
} else {
if indexPath == selectedIndexPath! {
selectedIndexPath = nil
tableView.reloadRows(at: [indexPath], with: .automatic)
} else {
let currentIndexPath = selectedIndexPath!
selectedIndexPath = indexPath
tableView.reloadRows(at: [currentIndexPath, indexPath], with: .automatic)
}
}
}
在cellForRowAt
中进行检查
if indexPath == selectedIndexPath