如何在Swift中使用一个IBAction用于多个按钮?

Swi*_*yJD 11 iphone uibutton ios swift

我有多个按钮,每个按钮都能切换应用程序的语言.而不是必须为每个按钮创建多个IBAction是否有一种方法可以将它们全部连接到一个IBAction并根据按下的按钮更改语言?我认为在这种情况下使用switch语句会很好,但不能确定如何设置它.

Cod*_*ent 29

在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
    }
}
Run Code Online (Sandbox Code Playgroud)

要将操作连接到多个按钮:在Interface Builder中,右键单击视图层次结构中的ViewController,然后单击鼠标左键以将操作连接拖动到每个按钮.

  • 在Interface Builder中,右键单击视图层次结构中的"ViewController",然后单击鼠标左键以将操作连接拖动到每个按钮 (8认同)

Hay*_*abe 10

是的,转换语句是这里的方法.对于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!
Run Code Online (Sandbox Code Playgroud)

您可以将它们全部连接到同一个方法,并根据哪个是发件人来分支逻辑.例如:

@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

    }

}
Run Code Online (Sandbox Code Playgroud)

注意:Swift中的Case语句必须是详尽的,因此您必须包含一个默认情况,即使它永远不应该被调用.


Edw*_*ony 7

如果您参考按钮,请不要设置标签.

您只需比较参考而不是标记.这样,您就不会引入新的错误,因为与您自己键入的标记不同,引用是由编译器自动创建的.

@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 {

    }
}
Run Code Online (Sandbox Code Playgroud)