【问题标题】:IBAction sometimes not being called when touching buttons - Swift触摸按钮时有时不会调用 IBAction - Swift
【发布时间】:2017-07-23 08:48:33
【问题描述】:

我正在尝试开发一个文字游戏,玩家可以点击按钮来选择字母。

我的按钮有时无法注册触摸似乎存在问题。只有在触摸按钮之前没有用户交互的情况下暂停几秒钟,才会出现这种情况。如果第一次接触有效,那么快速跟进接触也有效。

@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 个“平铺”按钮和一个“清除”和“提交”按钮)

我做错了什么?

Link to video showing issue 最初的几次接触有效,但随后变得怪异。

瓷砖选择

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 Up Inside 设置操作。
  • 您是否尝试过在活动内部进行修饰?
  • 只有当您点击“提交”按钮时,视频中的问题才会开始。您的提交功能中发生了什么?你如何清除按钮突出显示的状态?显示你的代码。
  • 请展示您处理提交操作的函数
  • @Nirav D 我用 Touch up 试过了,没有区别。

标签: ios swift button touch ibaction


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-27
      • 1970-01-01
      • 1970-01-01
      • 2020-12-30
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多