2016-03-29 7 views
0

私はボタンを試していますが、おそらく簡単な問題に遭遇しました。私は2つのボタンと2つのラベルを持っています。SwiftのUIKitを使用して複数のボタンタップを登録するには?

ラベルは、 "A"または "B"のいずれかのランダムな文字列値を生成します。適切なボタンが選択されていれば、正しいラベルが消えたがります。

私は次のコードを考え出しましたが、問題が発生しました。文字が同じ場合は、対応するボタンをタップすると両方のラベルが非表示になります。

私はこれがなぜ起こっているのか理解しています。これは、buttonAが1回タップされたときにコードが実行されるためです(ボタンBをまだ起動していないので、何もしません)。

どうして2タップが必要ですか?言い換えれば、label_1とlabel_2の両方がString "A"として表示されている場合、ユーザーにbuttonAを2回タップする必要がありますか?より多くのコードが必要な場合は、コメントに私に教えてください。

@IBOutlet weak var label_1: UILabel! 
    @IBOutlet weak var label_2: UILabel! 
    @IBOutlet weak var label_3: UILabel! 
    @IBOutlet weak var label_4: UILabel! 
    @IBOutlet weak var label_5: UILabel! 


    var visibleLetters = ["A", "B", "Z", "X"] 
    var text = "", text2 = "", text3 = "", text4 = "", text5 = "" 
    let aButton = "A", bButton = "B", zButton = "Z", xButton = "X" 
    var x = 0 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     createRandomLetter(text, aSecondLetter: text2, aThirdLetter: text3, aFourthLetter: text4, aFifthLetter: text5) 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    @IBAction func buttonA(sender: UIButton) { 

     if aButton == label_1.text { 
      label_1.hidden = true 
      label_1.tag += 1 
     } 

     else { 
      //play animation 
      print("play animation") 
     } 
    } 

    @IBAction func buttonB(sender: UIButton) { 
     if bButton == label_1.text { 
      label_1.hidden = true 
     } 
    } 

    @IBAction func buttonX(sender: UIButton) { 
     if xButton == label_1.text { 
      label_1.hidden = true 
     } 
    } 

    @IBAction func buttonZ(sender: UIButton) { 
     if zButton == label_1.text { 
      label_1.hidden = true 
     } 
    } 



    func createRandomLetter(individualLetter: String, aSecondLetter: String, aThirdLetter: String, aFourthLetter: String, aFifthLetter: String) { 

     let individuaLetter = visibleLetters[Int(arc4random_uniform(UInt32(visibleLetters.count)))], 
     aSecondLetter = visibleLetters[Int(arc4random_uniform(UInt32(visibleLetters.count)))], 
     aThirdLetter = visibleLetters[Int(arc4random_uniform(UInt32(visibleLetters.count)))], 
     aFourthLetter = visibleLetters[Int(arc4random_uniform(UInt32(visibleLetters.count)))], 
     aFifthLetter = visibleLetters[Int(arc4random_uniform(UInt32(visibleLetters.count)))] 

     label_1.text = individuaLetter 
     label_2.text = aSecondLetter 
     label_3.text = aThirdLetter 
     label_4.text = aFourthLetter 
     label_5.text = aFifthLetter 
    } 

    func isCorrect() { 

     if aButton == label_1.text { 
      label_1.hidden = true 
      label_1.tag += 1 
     } 

     else if label_1.tag == 1 && aButton == label_2.text { 

     } 
     else { 
      //play animation 
      print("play animation") 
     } 
    } 
} 
+0

私はあなたがしたいことを確かめてください。あなたは私に詳細を教えてくれますか? – Ryan

+0

label1はbuttonAに関連付けられ、label2はbuttonBに関連付けられますか? 2回タップする必要性について説明できますか? – ryantxr

+0

私は自分が望むものを説明するために最善を尽くします。私はランダムな文字セットと一定のボタンセットを持っています。ボタンは常にA、B、X、Zです(私はすぐに余分なボタンを追加することを後悔します)ので、XとZを追加しなかったようなふりをします。 label_1がAを表示している場合はAを、Bを表示している場合はBを押す必要があります。ユーザーが正しいボタンを押すと、label_2についても同様の操作を行います。 – QuirkyCoder

答えて

0

いいえあなたがしようとしていることを理解しようとしています。あなたは4つのラベルと2つのボタン(A、B)を持っています。ラベルはA、Bのランダムに生成された値を持っています。ボタンをクリックすると、そのボタンに同じラベルのテキストがあるかどうかを確認する必要があります。ラベル2と同じことをしてください。

あなたのラベルにタグを関連付ける(私はあなたがalredyそれをやっていると思うこと)と例

var temporal:String! 
    var current_tag:Int = 1 
    override func viewDidLoad() { 
    super.viewDidLoad() 

    createRandomLetter(text, aSecondLetter: text2, 
    aThirdLetter: text3, aFourthLetter: text4, aFifthLetter: text5) 
    temporal = label1.text 

} 

    @IBAction func buttonZ(sender: UIButton) { 
    //Answer is correct 
    if zButton == temporal { 
     current_tag++ 
     IsCorrect(current_tag) 
    } 

} 
func Iscorrect(tag:Int) 
{ 

    if(label2.tag == tag) 
    { 
     temporal = label2.text 
    } 
    else if(label3.tag == tag) 
    { 
     temporal = label2.text 
    } 
    else if(label4.tag == tag) 
    { 
     temporal = label2.text 
    } 
} 

Somethignのために現在のラベルを追跡するために一時的な変数を持つことができ、これを行うための論理的な方法それはうまくいくはずだ、私は私のIpadから答えると私はそれを試していないと私はラップトップにアクセスする必要はありませんが、何かが完全に動作する必要があります、疑問を私はあなたを助けることができます

+0

はい!それはまさに私がやろうとしていることです!今私はそれがなぜ機能するのか理解しようとしています。また、私はこのエラーが表示されます:致命的なエラー:予期せず、オプション値をアンラッピングしながらnilが見つかりました。 label2.tagがcurrent_tagと一致していなかったためにエラーが発生したと考えましたが、一致するように見えるので、一時的に値がない理由を理解しようとしています。 – QuirkyCoder

+0

このエラーは、私たちが、ビューのdidloadメソッドで私は一時的に何かの前に初期化しようと初期化しようと初期化しようとしていない変数を比較しようとしているときに発生している必要がありますtemporal:String ""私は家にいます2時間後に試してみてください。答えが正しいとマークしてくれたら助かりました。XD –

+0

私はあなたがviewDidLoadで変数を割り当てられなかったのを忘れました。しばらく作業した後、私は何が起こっているのかについての基本的な考えを持っていると思う。ご協力ありがとうございました。 – QuirkyCoder

関連する問題