2016-06-16 12 views
5

私はアプリの言語を切り替えることができる複数のボタンを持っています。ボタンごとに複数のIBActionsを作成する代わりに、それらをすべて1つのIBActionに接続し、ボタンを押したときに言語を変更する方法がありますか?私はswitch文がこのような状況で使うのが良いだろうと思っていますが、それを設定する方法が正確にはわかりません。 Interface BuilderでSwiftの複数のボタンに1つのIBActionを使用する方法は?

+0

せずにその良いアイデアを、それを解決することができれば、タグを設定することが好きではない; D –

+0

ibactionsを扱う1セットアップを設定するために、どのように任意のアイデア? – SwiftyJD

+0

送信者には多くのプロパティがあります:タイトル、タグなど。また、識別プロパティでカスタムボタンクラスを作成することもできます。 –

答えて

19

、属性インスペクタを選択し、一意の番号で各ボタンのタグを設定し、その後、あなたはこのような何か行うことができます。複数のボタンにアクションを接続するには

@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を右クリックし、左クリックしてアクション接続を各ボタンにドラッグします。

+1

どのように各ボタンをストーリーボードのアクションに接続できますか?ボタンをクリックしてIBActionにドラッグすることはできません。 – SwiftyJD

+4

Interface Builderでビュー階層の 'ViewController'を右クリックし、左クリックしてアクション接続を各ボタンにドラッグします –

+1

OK、ありがとう! – SwiftyJD

6

はい、switch文がここに移動する方法です。 UIButtonの場合は、ユーザーがボタンとやりとりしたときに呼び出されるセレクタ、通常はTouchUpInsideイベントにリンクします。 The addTarget method, and valid selector signatures (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 

    } 

} 

注:あなたはそれが呼び出されるべきではありませんにもかかわらず、デフォルトのケースを含める必要がありますのでスウィフトでのcase文は、網羅的である必要があります。

3

私たちは、はいタグ

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

    } 
} 
関連する問題