2017-03-03 5 views
0

私はプレイヤーがボタンをクリックして文字を選択する単語ゲームを開発しようとしています。ボタンに触れるときにIBActionが呼び出されないことがある - Swift

私のボタンがタッチを登録しないことがあります。これは、ボタンが触れる前にユーザーのやりとりがなく、数秒間ポーズがある場合にのみ発生するようです。最初のタッチが機能する場合、迅速なフォローアップタッチも機能します。問題が発生したときに

@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 = "" 
} 

何も印刷されません取得します。すぐに2回目のタッチでフォローアップすると、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

イベントのタッチアップのアクションを設定する必要があります。 –

+0

タッチアップイベントで試しましたか? – karthikeyan

+0

ビデオの問題は、[送信]ボタンをクリックしたときにのみ始まります。送信機能で何が起こっていますか?どのようにボタンの強調表示された状態をクリアしますか?そのコードを表示します。 –

答えて

0

クリックされるたびに変更してみてくださいとステータスバーを隠していたにもかかわらず、Top Layout Guide.bottomに制限されたラベル。

Top Layout Guide.bottomではなく、関連するラベルの制約をtopMarginに変更すると、タッチが紛失してしまうという問題が解決されました。

0

は、内部のタッチアップするためにタッチダウンを変更してみてください、とボタンの状態に私が持っていたそれは

関連する問題