簡體   English   中英

如何在Swift中使用一個IBAction用於多個按鈕?

[英]How to use one IBAction for multiple buttons in Swift?

我有多個按鈕,每個按鈕都能切換應用程序的語言。 而不是必須為每個按鈕創建多個IBAction是否有一種方法可以將它們全部連接到一個IBAction並根據按下的按鈕更改語言? 我認為在這種情況下使用switch語句會很好,但不能確定如何設置它。

在Interface Builder中,選擇Attributes Inspector並為每個按鈕設置一個唯一編號的Tag,然后您可以執行以下操作:

@IBAction changeLanguage(sender: AnyObject) {
    guard let button = sender as? UIButton else {
        return
    }

    switch button.tag {
    case 1:
        // Change to English
    case 2:
        // Change to Spanish
    case 3:
        // Change to French, etc
    default:
        print("Unknown language")
        return
    }
}

要將操作連接到多個按鈕:在Interface Builder中,右鍵單擊視圖層次結構中的ViewController,然后單擊鼠標左鍵以將操作連接拖動到每個按鈕。

是的,轉換語句是這里的方法。 對於UIButton,您可以將其鏈接到用戶與按鈕交互時調用的選擇器,通常是TouchUpInside事件。 addTarget方法和有效的選擇器簽名(apple.com)其中,你想要使用@IBAction func doSomething(sender: UIButton)@IBAction func doSomething(sender: UIButton, forEvent event: UIEvent)格式的方法,以便對觸發事件的按鈕的引用傳遞給選擇器。

在您的ViewController代碼中,您將引用您的UIButtons(可能在故事板中,或手動創建。)假設您有

@IBOutlet weak var frenchButton: UIButton!
@IBOutlet weak var spanishButton: UIButton!
@IBOutlet weak var englishButton: UIButton!

您可以將它們全部連接到同一個方法,並根據哪個是發件人來分支邏輯。 例如:

@IBAction func changeLanguage(sender: UIButton) {
    switch sender {
    case frenchButton:
        // Change Language to French
        print ("C'est si bon")
    case spanishButton:
        // or Spanish
        print ("Muy Bueno")
    case englishButton:
        // or English
        print ("It's pretty cool")
    default:
        break

    }

}

注意:Swift中的Case語句必須是詳盡的,因此您必須包含一個默認情況,即使它永遠不應該被調用。

如果您參考按鈕,請不要設置標簽。

您只需比較參考而不是標記。 這樣,您就不會引入新的錯誤,因為與您自己鍵入的標記不同,引用是由編譯器自動創建的。

@IBOutlet weak var firstButton: UIButton!
@IBOutlet weak var secondButton: UIButton!
@IBOutlet weak var thirdButton: UIButton!

@IBAction changeLanguage(sender: UIButton) {
    if sender == firstButton {

    } else if sender == secondButton {

    } else if sender == thirdButton {

    }
}

暫無
暫無

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

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