Swift UICollectionViewCell Timer Play / Pause Загрузка кнопок в другую ячейку при нажатии кнопки - PullRequest
0 голосов
/ 05 мая 2019

Я вынул часть кода, потому что все, что он делает, это отображает текст, который не имеет никакого отношения к состоянию или кнопкам.

Важный фактор ... Состояние 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.

...