触摸按钮时有时不会调用 IBAction - Swift

IBAction sometimes not being called when touching buttons - Swift

我正在尝试开发一款文字游戏,玩家可以在其中点击按钮获得 select 个字母。

这似乎是我的按钮有时不记录触摸的问题。它似乎只有在触摸按钮之前没有用户交互的情况下停顿几秒钟才会发生。如果第一次触摸有效,快速跟进触摸也有效。

@IBAction func tileButton1(_ sender: UIButton) {
    print("Tile 1 Selected")
    tileSelected(tileSelected: 1)
}

@IBAction func clearButton(_ sender: Any) {
    clearSelectedTiles()
}


@IBAction func SubmitButton(_ sender: Any) {
    //print("Submit Button Pressed")
    checkIfSubmittedWordIsValid()
}

checkIfSubmittedWordIsValid

func checkIfSubmittedWordIsValid() {
    var alreadySelectedWords: [String] = []
    switch currentPlayer {
    case 1:
        alreadySelectedWords = player1words
    case 2:
        alreadySelectedWords = player2words
    case 3:
        alreadySelectedWords = player3words
    case 4:
        alreadySelectedWords = player4words
    default:
        break
    }
    if currentWord.characters.count < 3 {
        print("Too short")
        playSound(fileName: "invalidWord", fileExtension: "aiff", volume: 1.0)
    } else if alreadySelectedWords.contains(currentWord) {
        print("Already picked this word")
        playSound(fileName: "invalidWord", fileExtension: "aiff", volume: 1.0)
    } else if wordList.contains(currentWord.lowercased()) {
        print("Valid Word")
        playSound(fileName: "goodWord", fileExtension: "wav", volume: 0.5)
        addWordToPlayerList(word: currentWord)
    } else {
        print("Not in dictionary")
        playSound(fileName: "invalidWord", fileExtension: "aiff", volume: 1.0)
    }
    clearSelectedTiles()
}

clearSelectedTiles

func clearSelectedTiles() {
    tile1.alpha = 1
    tile2.alpha = 1
    tile3.alpha = 1
    tile4.alpha = 1
    tile5.alpha = 1
    tile6.alpha = 1
    tile7.alpha = 1
    tile8.alpha = 1
    tile9.alpha = 1
    tile10.alpha = 1
    tile11.alpha = 1
    tile12.alpha = 1
    tile13.alpha = 1
    tile14.alpha = 1
    tile15.alpha = 1
    tile16.alpha = 1
    selectedTiles.removeAll()
    validTiles = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
    selectedWordLabel.text = ""
    currentWord = ""
}

问题发生时没有打印任何内容。快速跟进第二次触摸将触发 IBAction 并打印到日志。

我的所有其他按钮(另外 15 个 'tile' 按钮以及一个 'Clear' 和 'Submit' 按钮)似乎也会发生这种情况

我做错了什么?

Link to video showing issue 最初的几次触摸有效,但随后就很奇怪了。

tileSelected

func tileSelected(tileSelected: Int) {
    if isTileValid(tile: tileSelected) {
        selectedTiles.append(tileSelected)
        var surroundingTiles: [Int] = []
        switch tileSelected {
        case 1:
            tile1.alpha = 0.5
            surroundingTiles = [2,5,6]
        case 2:
            tile2.alpha = 0.5
            surroundingTiles = [1,3,5,6,7]
        case 3:
            tile3.alpha = 0.5
            surroundingTiles = [2,4,6,7,8]
        case 4:
            tile4.alpha = 0.5
            surroundingTiles = [3,7,8]
        case 5:
            tile5.alpha = 0.5
            surroundingTiles = [1,2,6,9,10]
        case 6:
            tile6.alpha = 0.5
            surroundingTiles = [1,2,3,5,7,9,10,11]
        case 7:
            tile7.alpha = 0.5
            surroundingTiles = [2,3,4,6,8,10,11,12]
        case 8:
            tile8.alpha = 0.5
            surroundingTiles = [3,4,7,11,12]
        case 9:
            tile9.alpha = 0.5
            surroundingTiles = [5,6,10,13,14]
        case 10:
            tile10.alpha = 0.5
            surroundingTiles = [5,6,7,9,11,13,14,15]
        case 11:
            tile11.alpha = 0.5
            surroundingTiles = [6,7,8,10,12,14,15,16]
        case 12:
            tile12.alpha = 0.5
            surroundingTiles = [7,8,11,15,16]
        case 13:
            tile13.alpha = 0.5
            surroundingTiles = [9,10,14]
        case 14:
            tile14.alpha = 0.5
            surroundingTiles = [9,10,11,13,15]
        case 15:
            tile15.alpha = 0.5
            surroundingTiles = [10,11,12,14,16]
        case 16:
            tile16.alpha = 0.5
            surroundingTiles = [11,12,15]
        default:
            // do nothing
            break
        }
        updateValidTiles(surroundingTiles: surroundingTiles)
        //print("Updated Valid Tiles")
        //print(validTiles)
        //print("Selected Tiles")
        //print(selectedTiles)
        currentWord = currentWord + boardTiles[tileSelected - 1].tileLetter
        selectedWordLabel.text = currentWord
    }
}

尝试将 touch down 更改为 touch up inside,并尝试在每次单击时更改按钮的状态

即使我使用 override var prefersStatusBarHidden 隐藏状态栏,我也将一些标签限制在 Top Layout Guide.bottom

将相关标签约束更改为 topMargin 而不是 Top Layout Guide.bottom 解决了我有时会错过触摸的问题。