簡體   English   中英

如何在Swift中處理許多UIButton上的輕擊

[英]How to handle taps on many UIButtons in Swift

我正在嘗試在Swift中制作一個應用程序,該應用程序具有以一位整數作為標簽文本的標簽網格。 我想點擊一個標簽並使其具有整數增量。我從一個有關Tic Tac Toe應用程序的教程中了解到,我可以使用一個清除按鈕(1-36)覆蓋每個標簽,並使用水龍頭來增加標簽(1 -36)下方的文字編號。 到現在為止還挺好。 本教程使用switch語句來傳遞所點擊按鈕的標簽,並將案例硬編碼到Label引用中。 這對Tic Tac Toe很好,因為它只有3x3的網格,但是我的網格是6x6的,而且我懶於對所有36種情況進行硬編碼。 有沒有更聰明的方法來傳遞按鈕標簽並執行此操作?

我正在考慮將按鈕標簽文本整數存儲在數組中並對其進行讀取/寫入/然后從那里更新標簽。 這可能比我現在擁有的要好,但是我認為它不能解決我的switch語句問題。

任何意見,將不勝感激。

import UIKit

class ViewController: UIViewController {

@IBOutlet var Label1: UILabel! //Row one
@IBOutlet var Label2: UILabel!
@IBOutlet var Label3: UILabel!
@IBOutlet var Label4: UILabel!
@IBOutlet var Label5: UILabel!
@IBOutlet var Label6: UILabel!

@IBOutlet var Label7: UILabel!  //Row two
@IBOutlet var Label8: UILabel!
@IBOutlet var Label9: UILabel!
@IBOutlet var Label10: UILabel!
@IBOutlet var Label11: UILabel!
@IBOutlet var Label12: UILabel!

@IBOutlet var Label13: UILabel!  //Row three
@IBOutlet var Label14: UILabel!
@IBOutlet var Label15: UILabel!
@IBOutlet var Label16: UILabel!
@IBOutlet var Label17: UILabel!
@IBOutlet var Label18: UILabel!

@IBOutlet var Label19: UILabel!  //Row four
@IBOutlet var Label20: UILabel!
@IBOutlet var Label21: UILabel!
@IBOutlet var Label22: UILabel!
@IBOutlet var Label23: UILabel!
@IBOutlet var Label24: UILabel!

@IBOutlet var Label25: UILabel!  //Row five
@IBOutlet var Label26: UILabel!
@IBOutlet var Label27: UILabel!
@IBOutlet var Label28: UILabel!
@IBOutlet var Label29: UILabel!
@IBOutlet var Label30: UILabel!

@IBOutlet var Label31: UILabel!  //Row six
@IBOutlet var Label32: UILabel!
@IBOutlet var Label33: UILabel!
@IBOutlet var Label34: UILabel!
@IBOutlet var Label35: UILabel!
@IBOutlet var Label36: UILabel!


@IBOutlet var Button1: UIButton!  //Row one
@IBOutlet var Button2: UIButton!
@IBOutlet var Button3: UIButton!
@IBOutlet var Button4: UIButton!
@IBOutlet var Button5: UIButton!
@IBOutlet var Button6: UIButton!

@IBOutlet var Button7: UIButton!  //Row two
@IBOutlet var Button8: UIButton!
@IBOutlet var Button9: UIButton!
@IBOutlet var Button10: UIButton!
@IBOutlet var Button11: UIButton!
@IBOutlet var Button12: UIButton!

@IBOutlet var Button13: UIButton!  //Row three
@IBOutlet var Button14: UIButton!
@IBOutlet var Button15: UIButton!
@IBOutlet var Button16: UIButton!
@IBOutlet var Button17: UIButton!
@IBOutlet var Button18: UIButton!

@IBOutlet var Button19: UIButton!  //Row four
@IBOutlet var Button20: UIButton!
@IBOutlet var Button21: UIButton!
@IBOutlet var Button22: UIButton!
@IBOutlet var Button23: UIButton!
@IBOutlet var Button24: UIButton!

@IBOutlet var Button25: UIButton!  //Row five
@IBOutlet var Button26: UIButton!
@IBOutlet var Button27: UIButton!
@IBOutlet var Button28: UIButton!
@IBOutlet var Button29: UIButton!
@IBOutlet var Button30: UIButton!

@IBOutlet var Button31: UIButton!  //Row six
@IBOutlet var Button32: UIButton!
@IBOutlet var Button33: UIButton!
@IBOutlet var Button34: UIButton!
@IBOutlet var Button35: UIButton!
@IBOutlet var Button36: UIButton!

@IBAction func UIButtonClicked(sender:UIButton) {
    setLabelTextForButton(sender.tag)
}

func setLabelTextForButton(labelTag:Int) {
    switch labelTag{
    case 1:
        var currentLabel:Int = Label1.text.toInt()!
        if currentLabel == 9        // IF statement to reset to 0 if label is currently 9
        { currentLabel = 0
            Label1.text = String(currentLabel) }
        else {
        currentLabel = currentLabel + 1
            Label1.text = String(currentLabel)}
    case 2:
        var currentLabel:Int = Label2.text.toInt()! // OMG I have to code for all these buttons
        currentLabel = currentLabel + 1
        Label2.text = String(currentLabel)
    case 3:
        var currentLabel:Int = Label3.text.toInt()!
        currentLabel = currentLabel + 1
        Label3.text = String(currentLabel)
    case 4:
        var currentLabel:Int = Label4.text.toInt()!
        currentLabel = currentLabel + 1
        Label4.text = String(currentLabel)
    case 5:
        var currentLabel:Int = Label5.text.toInt()!
        currentLabel = currentLabel + 1
        Label5.text = String(currentLabel)
    case 6:
        var currentLabel:Int = Label6.text.toInt()!
        currentLabel = currentLabel + 1
        Label6.text = String(currentLabel)
    case 7:
        var currentLabel:Int = Label7.text.toInt()!
        currentLabel = currentLabel + 1
        Label7.text = String(currentLabel)
    case 8:
        var currentLabel:Int = Label8.text.toInt()!
        currentLabel = currentLabel + 1
        Label8.text = String(currentLabel)
    case 9:
        var currentLabel:Int = Label9.text.toInt()!
        currentLabel = currentLabel + 1
        Label9.text = String(currentLabel)
    case 10:
        var currentLabel:Int = Label10.text.toInt()!
        currentLabel = currentLabel + 1
        Label10.text = String(currentLabel)
    case 11:
        var currentLabel:Int = Label11.text.toInt()!
        currentLabel = currentLabel + 1
        Label11.text = String(currentLabel)
    case 12:
        var currentLabel:Int = Label12.text.toInt()!
        currentLabel = currentLabel + 1
        Label12.text = String(currentLabel)
    case 13:
        var currentLabel:Int = Label13.text.toInt()!
        currentLabel = currentLabel + 1
        Label13.text = String(currentLabel)
    case 14:
        var currentLabel:Int = Label14.text.toInt()!
        currentLabel = currentLabel + 1
        Label14.text = String(currentLabel)
    case 15:
        var currentLabel:Int = Label15.text.toInt()!
        currentLabel = currentLabel + 1
        Label15.text = String(currentLabel)
    case 16:
        var currentLabel:Int = Label16.text.toInt()!
        currentLabel = currentLabel + 1
        Label16.text = String(currentLabel)
    case 17:
        var currentLabel:Int = Label17.text.toInt()!
        currentLabel = currentLabel + 1
        Label17.text = String(currentLabel)
    case 18:
        var currentLabel:Int = Label18.text.toInt()!
        currentLabel = currentLabel + 1
        Label18.text = String(currentLabel)
    case 19:
        var currentLabel:Int = Label19.text.toInt()!
        currentLabel = currentLabel + 1
        Label19.text = String(currentLabel)
    case 20:
        var currentLabel:Int = Label20.text.toInt()!
        currentLabel = currentLabel + 1
        Label20.text = String(currentLabel)
    case 21:
        var currentLabel:Int = Label21.text.toInt()!
        currentLabel = currentLabel + 1
        Label21.text = String(currentLabel)
    case 22:
        var currentLabel:Int = Label22.text.toInt()!
        currentLabel = currentLabel + 1
        Label22.text = String(currentLabel)
    case 23:
        var currentLabel:Int = Label23.text.toInt()!
        currentLabel = currentLabel + 1
        Label23.text = String(currentLabel)
    case 24:
        var currentLabel:Int = Label24.text.toInt()!
        currentLabel = currentLabel + 1
        Label24.text = String(currentLabel)
    case 25:
        var currentLabel:Int = Label25.text.toInt()!
        currentLabel = currentLabel + 1
        Label25.text = String(currentLabel)
    case 26:
        var currentLabel:Int = Label26.text.toInt()!
        currentLabel = currentLabel + 1
        Label26.text = String(currentLabel)
    case 27:
        var currentLabel:Int = Label27.text.toInt()!
        currentLabel = currentLabel + 1
        Label27.text = String(currentLabel)
    case 28:
        var currentLabel:Int = Label28.text.toInt()!
        currentLabel = currentLabel + 1
        Label28.text = String(currentLabel)
    case 29:
        var currentLabel:Int = Label29.text.toInt()!
        currentLabel = currentLabel + 1
        Label29.text = String(currentLabel)
    case 30:
        var currentLabel:Int = Label30.text.toInt()!
        currentLabel = currentLabel + 1
        Label30.text = String(currentLabel)
    case 31:
        var currentLabel:Int = Label31.text.toInt()!
        currentLabel = currentLabel + 1
        Label31.text = String(currentLabel)
    case 32:
        var currentLabel:Int = Label32.text.toInt()!
        currentLabel = currentLabel + 1
        Label32.text = String(currentLabel)
    case 33:
        var currentLabel:Int = Label33.text.toInt()!
        currentLabel = currentLabel + 1
        Label33.text = String(currentLabel)
    case 34:
        var currentLabel:Int = Label34.text.toInt()!
        currentLabel = currentLabel + 1
        Label34.text = String(currentLabel)
    case 35:
        var currentLabel:Int = Label35.text.toInt()!
        currentLabel = currentLabel + 1
        Label35.text = String(currentLabel)
    case 36:
        var currentLabel:Int = Label36.text.toInt()!
        currentLabel = currentLabel + 1
        Label36.text = String(currentLabel)

    default: something something

使用按鈕的label屬性代替多余的標簽。 看起來像這樣:

@IBOutlet var Button1: UIButton!  //Row one
@IBOutlet var Button2: UIButton!
@IBOutlet var Button3: UIButton!
@IBOutlet var Button4: UIButton!
@IBOutlet var Button5: UIButton!
@IBOutlet var Button6: UIButton!
....

@IBAction func increaseLabel(sender: UIButton) {
    var currentLabel = sender.titleLabel.text.toInt()!
    currentLabel = currentLabel + 1
    sender.setTitle("\(currentLabel)", forState: .Normal)
}

然后將所有按鈕連接到Interface Builder中的該操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM