[英]How to use buttons on “one IBAction for multiple buttons” in swift 2.x?
[英]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.