簡體   English   中英

Swift 3更改UIButton的標題

[英]Swift 3 changing the title of a UIButton

我一直在網上瀏覽,但找不到解決我問題的方法。 我希望游戲結束后,“開始”按鈕的文本更改為“重新開始”。 如果需要任何其他信息,請告訴我。 謝謝,感謝您的幫助。 下面是我的代碼。

class ViewController: UIViewController {

var gameOver = false
var stopFuncs = false

var gameTimer = Timer()
var counter = 10

var selected = "NONE"
var score = 0
var colour = "NONE"


@IBOutlet weak var colourLabel: UILabel!

let colourProvider = ColourProvider()

@IBOutlet weak var scoreLabel: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()

    colour = colourProvider.randomColour()
    print(colour)
    colourLabel.text = colour


    // Do any additional setup after loading the view, typically from a nib.
}

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

@IBOutlet weak var counterLabel: UILabel!

func updateCounter() {
    if counter >= 0 {
        counterLabel.text = String(counter)
        counter -= 1
    }
}

@IBAction func startButton() {
    gameOver = false
    counter = 10
    stopFuncs = false
    var _ = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(updateCounter), userInfo: nil, repeats: true)
}


@IBAction func greenButton() {
    if stopFuncs { return }
    compareColours(selectedColour: "GREEN")
    changeColourLabel()
    colourLabel.textColor = UIColor.green
}

@IBAction func blueButton() {
    if stopFuncs { return }
    compareColours(selectedColour: "BLUE")
    changeColourLabel()
    colourLabel.textColor = UIColor.blue
}

@IBAction func yellowButton() {
    if stopFuncs { return }
    compareColours(selectedColour: "YELLOW")
    changeColourLabel()
    colourLabel.textColor = UIColor.yellow
}

@IBAction func pinkButton() {
    if stopFuncs { return }
    compareColours(selectedColour: "GREEN")
    changeColourLabel()
    colourLabel.textColor = UIColor.red
}

func compareColours(selectedColour: String) {
    if gameOver == false && counter >= 1 {
        if selectedColour == colour {
            score += 1
            let scoreString = String(score)
            scoreLabel.text = scoreString
        }
        else {
            gameOver = true
        }
    }
    else {
        stopFuncs = true


    }
}

func changeColourLabel() {
    colour = colourProvider.randomColour()
    colourLabel.text = colour
    print(colour)
}

}

您已經擁有一些標簽的IBOutlets

對於按鈕,您可能需要同時設置IBactionIBOutlet

IBOutlet是一回事。 一個名詞。 它是對視圖對象的引用。

IBAction是動詞。 一種行為。 UIControl發生任何事情(點擊按鈕,移動滑塊,更改分段控件上的選定值等)時,將調用該代碼。

IBaction是在用戶與控件交互時調用的函數(對於按鈕,您幾乎總是將操作鏈接到.touchUpInside控件事件。)

pinkButton名稱來命名您的動作是一個壞主意,並導致混亂。 我建議將您的動作重命名為動詞,例如handlePinkButton (或“ pinkBut​​tonTapped”,但我更喜歡動作名稱為動詞。)

請注意,在重命名IBAction和/或IBOutlet ,必須進入IB(IB = Interface Builder),選擇連接檢查器,將現在不正確的IBOutlet / IBAction刪除,然后將對象中的Control-Drag拖動到更新的插座/動作。

如果不這樣做,那么在運行時將導致非常混亂的崩潰:

  • 在代碼中重命名IBOutlets而不在IB中更改它們時,在嘗試加載視圖時出現錯誤“該類不符合密鑰old_outlet_name的鍵值編碼要求”(其中“ old_outlet_name”將是插座的舊名稱。)。情節提要中的控制器。 重命名動作)

  • 當您嘗試點擊按鈕(或觸發其他控件的動作)時,在代碼中重命名IBActions而不在IB中更改它們的情況下,會出現錯誤“無法識別的選擇器發送到實例big_hex_number”。

您應該在主編輯器中打開情節提要,在輔助編輯器中打開源代碼,然后從IB中的按鈕將控件拖到班級頂部其他插座下的源代碼中。

您的按鈕需要是IBOutlet而不是IBAction。 當從接口生成器ctrl拖動到代碼時,請確保選擇“輸出”選項,如下所示:

IB-代碼說明

然后,您可以像這樣更改按鈕標題:

else {
    startButton.setTitle("Button Title", for: .normal)
    stopFuncs = true
}

暫無
暫無

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

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