按下按钮动作后,Swift UICollectionViewCell计时器播放/暂停按钮将在不同的单元格上加载

时间:2019-05-04 23:31:06

标签: swift uicollectionview uicollectionviewcell

我删除了一些代码,因为它所做的只是显示与状态或按钮无关的文本。

重要因素...状态0为初始状态,状态1已设置并放置在数组中,然后使用cellStateArray [indexPath.row]

进行调用

我创建了一个应用程序,该应用程序使用UICollectionViewCell创建单个单元格,并且每个单元格中都有一个倒数计时器。在由myCollectionViewCell类对象控制的单元格中设置了播放和暂停按钮。该类初始化一个布尔变量“ pausePressed = false”。当我单击按钮“ pauseButton”时,动作事件将设置变量“ pausePressed = true”。然后,ViewController循环经过计时器,并检查哪个状态以及pausePressed是否为true。

我感到困惑后会发生什么。当我将单元格置于状态“ 1”时,将显示pauseButton。一旦按下pauseButton,其他单元格就会开始显示播放或暂停按钮。处于状态0的单元格没有任何理由显示隐藏的playButton或pauseButton。并且调试器控制台显示每个状态都正确。播放和暂停按钮在单元格中循环。我的代码在任何时候都不会调用timerPaused变量来再次更改,除非按下按钮时。就像是将信息存储在内存中并将其分配给其他单元一样。

如果由于初始化为false而更改了单元格,则2个周期后将其切换回true。我的代码中没有任何内容再次告知timerPaused = true。仅在按下按钮时才会发生这种情况,只有1次。我通过在pausePressed操作中执行一条打印语句来进行检查,以确保该语句仅在过去触发一次。

我认为这将是一个简单的循环问题,或者cellStateArray无法正确索引。但是,我会在创建每个单元格时检查其状态并暂停状态,以显示正确的信息。下面是控制台的输出。

调试控制台:

创建3个像元并尝试第二个像元的状态1-pausePressed

对于索引:0,当前单元格状态为:0

状态:0-已暂停:未显示

对于索引:1,当前单元格状态为:0

状态:0-已暂停:未显示

对于索引:2,当前单元格状态为:1

状态:1-已暂停:正确

对于索引:3,当前单元格状态为:0

状态:0-已暂停:未显示

对于索引:0,当前单元格状态为:0

状态:0-已暂停:未显示

对于索引:1,当前单元格状态为:0

状态:0-已暂停:未显示

对于索引:2,当前单元格状态为:1

状态:1-已暂停:错误

对于索引:3,当前单元格状态为:0

状态:0-已暂停:未显示

对于索引:0,当前单元格状态为:0

状态:0-已暂停:未显示

对于索引:1,当前单元格状态为:0

状态:0-已暂停:未显示

对于索引:2,当前单元格状态为:1

状态:1-已暂停:正确

我不明白为什么会来回切换,但是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) {
    }

}

简而言之,我希望仅在状态1的单元格上隐藏pauseButton,并且不隐藏playButton。

0 个答案:

没有答案