2017-03-03 65 views
0

我想開發一個文字遊戲,玩家點擊按鈕選擇字母。IBAction有時在觸摸按鈕時不會被調用 - 斯威夫特

似乎有問題,我的按鈕有時不註冊觸摸。它似乎只發生在按鈕觸摸之前沒有用戶交互的情況下暫停幾秒鐘。如果第一次觸摸工作,快速跟進觸摸也可以工作。

@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首先幾個接觸工作,但然後奇怪。

Storyboard

Touch Down event

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 
    } 
} 
+0

您需要爲事件觸摸Up Inside設置動作。 –

+0

您是否嘗試過修改內部事件? – karthikeyan

+0

只有當您點擊「提交」按鈕時,您的視頻纔會出現問題。您的提交功能發生了什麼?你如何清除突出顯示的按鈕狀態?顯示你的代碼。 –

回答

0

時候我已經改變了按鈕的狀態一些標籤限制爲Top Layout Guide.bottom,即使我隱藏狀態欄override var prefersStatusBarHidden

將相關標籤約束更改爲topMargin而不是Top Layout Guide.bottom已解決了我有時會錯失觸摸的問題。

0

嘗試改變觸摸到裏面摸了起來,並嘗試在每次點擊