Итак, предположим, у вас есть 10 вопросов, поэтому очень простое и обходное решение - объявить новый массив, который имеет 10 элементов, как следует
var questionIsLoaded = Array(repeating:true , count 10)
в предыдущей строке будет объявлен массив из 10 элементов в каждом Элемент is bool, который в нашем случае будет true
, затем объявляет функцию, которая обрабатывает, если вопрос загружен или нет следующим образом, поэтому, если вопрос загружен таким образом, вопрос с его indexPath должен быть помечен как true, и в результате кнопки yes и no должны быть скрыты, кнопки должны быть показаны
func handleQuestionIfLoaded(cell:yourCellType, indexPath:IndexPath) {
if questionIsLoaded[indexPath.row] , indexPath.row + 1 == displayNumber { {
questionIsLoaded[indexPath.row] = false
cell.questionLabel.text = questions[indexPath.row].question_name
cell.yesButton.isHidden = questionIsLoaded[indexPath.row]
cell.noButton.isHidden = questionIsLoaded[indexPath.row]
} else {
cell.yesButton.isHidden = questionIsLoaded[indexPath.row]
cell.noButton.isHidden = questionIsLoaded[indexPath.row]
}
cell.yesButton.addTarget(self, action: #selector(action), for: .touchUpInside)
cell.noButton.addTarget(self, action: #selector(action), for: .touchUpInside)
}
, затем замените тело cellForRowAt на приведенную выше функцию, затем свою функцию действия будет выглядеть следующим образом:
@objc func action(sender: UIButton){
let indexPath = self.tableView.indexPathForRow(at: sender.convert(CGPoint.zero, to: self.tableView))
let cell = tableView.cellForRow(at: indexPath!) as? TableViewCell
cell?.yesButton.isEnabled = questionIsLoaded[indexPath.row]
cell?.noButton.isEnabled = questionIsLoaded[indexPath.row]
if sender == cell?.yesButton {
sender.setTitleColor(.black, for: .normal)
sender.backgroundColor = .green
} else {
sender.setTitleColor(.black, for: .normal)
sender.backgroundColor = .green
}
displayNumber += 1
self.tableView.reloadData()
}
Теперь ваши ячейки зависят от внешней зависимости - массива, который вы объявили ранее, это означает, что когда ячейки снимаются с очереди, они будут повторно использоваться в соответствии с вопросом загружается или нет, сначала запрашивая элемент массива по указанному c indexPath, если элемент равен true или ложь