Я вынул часть кода, потому что все, что он делает, это отображает текст, который не имеет никакого отношения к состоянию или кнопкам.
Важный фактор ... Состояние 0 - это исходное состояние, состояние 1 установлено ипомещенный в массив, затем вызываемый с помощью cellStateArray [indexPath.row]
Я создал приложение, которое создает отдельную ячейку с UICollectionViewCell и имеет таймер обратного отсчета в каждой ячейке независимо.Кнопки воспроизведения и паузы установлены в ячейке, которая управляется объектом класса myCollectionViewCell.Класс инициализирует логическую переменную «pausePressed = false». Когда я нажимаю кнопку «pauseButton», событие действия устанавливает переменную «pausePressed = true».Затем ViewController циклически переключается по таймеру и проверяет, какое состояние и верно ли значение pausePressed.
Что происходит после того, как я запутался.Когда я помещаю ячейку в состояние "1", отображается кнопка pauseButton.После нажатия кнопки pauseButton другие ячейки начинают отображать кнопки воспроизведения или паузы.Ячейки, находящиеся в состоянии 0, не должны иметь никаких причин для отображения скрытого playButton или pauseButton.И консоль отладчика показывает, что все находятся в правильном состоянии.И кнопка воспроизведения и паузы циклически перебирает клетки.Ни в одной точке моего кода я не вызываю переменную timerPaused для повторного изменения, кроме случаев, когда нажата кнопка.Это как если бы она сохраняла информацию в памяти и присваивала ее различным ячейкам.
Если она изменяет ячейку из-за того, что она инициализируется как ложная, что заставляет ее вернуться к истине через 2 цикла.Ничто в моем коде снова не говорит timerPaused = true.Это происходит только при нажатии кнопки, что делается только 1 раз.Я проверил это, выполнив инструкцию print в действии pausePressed, чтобы убедиться, что он срабатывал только один раз в прошлом.
Я думал, что это будет простой проблемой зацикливания, или cellStateArray неправильно индексирует.Тем не менее, я проверяю состояние и состояние паузы для каждой ячейки, которая создается, что показывает правильную информацию.Ниже приведен вывод консоли.
Консоль отладки:
С созданием 3 ячеек и попыткой 2-й ячейки Состояние 1 - pausePressed
Для индекса: 0 текущее состояние ячейки: 0
Состояние: 0 - Приостановлено: не показано
Для индекса: 1 текущее состояние ячейки: 0
Состояние: 0 - Приостановлено: не показано
Для индекса: 2 текущее состояние ячейки: 1
Состояние: 1 - Приостановлено: True
Для индекса: 3текущее состояние ячейки: 0
Состояние: 0 - приостановлено: не показано
Для индекса: 0 текущее состояние ячейки: 0
Состояние: 0 -Приостановлено: не показано
Для индекса: 1 текущее состояние ячейки: 0
Состояние: 0 - Приостановлено: не показано
Для индекса: 2текущее состояние ячейки: 1
состояние: 1 - приостановлено: False
Для индекса: 3 текущее состояние ячейки: 0
Состояние: 0 - Приостановлено: не показано
Для индекса: 0 текущее состояние ячейки: 0
Состояние: 0 - Приостановлено: не показано
Для индекса: 1 текущее состояние ячейки: 0
Состояние: 0 - Приостановлено: не показано
Для индекса: 2 текущее состояние ячейки: 1
Состояние: 1 - Приостановлено: True
Не понимаю, почемуон идет туда-сюда, но pauseTimer не вызывается true, false, true снова
Попытка многократных попыток переписать код с другой логикой и в основном заканчивалась тем же или похожимситуация.
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! MyCollectionViewCell
if cellStateArray[indexPath.row] == 0 {
cell.pauseButton.isHidden = true
print("State: 0 -- Paused: Not Shown")
} else if cellStateArray[indexPath.row] == 1 && cell.timerPaused == false {
cell.pauseButton.isHidden = false
cell.playButton.isHidden = true
print("State: 1 -- Paused: False")
} else if cellStateArray[indexPath.row] == 1 && cell.timerPaused == true{
cell.pauseButton.isHidden = true
cell.playButton.isHidden = false
print("State: 1 -- Paused: True")
return cell
} else {
print("Did this and shouldn't have")
return cell
}
}
import UIKit
class MyCollectionViewCell: UICollectionViewCell {
var pauseTime = 0
var timerPaused = false
@IBOutlet weak var pauseButton: UIButton!
@IBOutlet weak var playButton: UIButton!
@IBOutlet weak var stopButton: UIButton!
@IBAction func pausePressed(_ sender: Any) {
timerPaused = true
}
@IBAction func playPressed(_ sender: Any) {
}
@IBAction func stopPressed(_ sender: Any) {
}
}
Проще говоря, я ожидаю, что кнопка pauseButton будет скрыта, а кнопка playButton будет скрыта только в ячейке в состоянии 1.