2017-03-03 3 views
0

Ich versuche ein Wortspiel zu entwickeln, bei dem Spieler auf Tasten klicken, um Buchstaben auszuwählen.IBAction wird manchmal nicht beim Berühren von Tasten aufgerufen - Swift

Es scheint ein Problem zu geben, wo meine Tasten manchmal keine Berührungen registrieren. Es scheint nur dann aufzutreten, wenn vor dem Berühren einer Schaltfläche eine Pause für einige Sekunden ohne Benutzerinteraktion auftritt. Wenn die erste Berührung funktioniert, funktionieren auch schnelle Folgeberührungen.

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

nichts gedruckt wird, wenn das Problem auftritt. Wenn Sie schnell mit einer zweiten Berührung fortfahren, wird die IBAction ausgelöst und der Ausdruck wird protokolliert.

Es scheint, mit allen meinen anderen Tasten auch geschehen (weiteren 15 ‚Kachel‘ Tasten und einer ‚Clear‘ und ‚Senden‘ Button)

Was mache ich falsch?

Link to video showing issue Die ersten paar Berührungen funktionieren aber dann Seltsamkeit.

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

Sie müssen eine Aktion für das Ereignis einrichten. –

+0

hast du es mit einem up-up-Ereignis versucht? – karthikeyan

+0

Die Probleme in deinem Video beginnen erst, wenn du auf "Senden" klickst. Was passiert in Ihrer Submit-Funktion? Wie löschst du die hervorgehobenen Zustände der Taste? Zeigen Sie Ihren Code dafür. –

Antwort

0

geklickt wird Ich hatte einige Etiketten sind auf die Top Layout Guide.bottom beschränkt, obwohl ich die Statusleiste mitversteckt habe.

Das Ändern der relevanten Etikettenbeschränkungen auf topMargin anstelle von Top Layout Guide.bottom hat mein Problem mit Berührungen, die manchmal übersehen werden, gelöst.

0

Ändern berühren Versuchen im Inneren zu berühren, und versuchen, den Zustand der Taste jedes Mal ändert es

Verwandte Themen