2016-06-16 23 views
5

Mam wiele przycisków, każdy z możliwością zmiany języka aplikacji. Zamiast konieczności tworzenia wielu IBActions dla każdego przycisku istnieje sposób, aby je wszystkie połączone z jednym IBAction i zmienić język w oparciu o naciśnięty przycisk? Myślę, że w takiej sytuacji dobrze byłoby użyć instrukcji zmiany, ale nie jestem do końca pewna, jak ją skonfigurować.Jak używać jednej IBAction dla wielu przycisków w Swift?

+0

Tak, jego dobry pomysł; D –

+0

Każdy pomysł jak je skonfigurować, który obsługuje ibactions? – SwiftyJD

+0

nadawca ma wiele właściwości: tytuł, znacznik i inne. możesz również utworzyć niestandardową klasę przycisków z właściwością identyfikacji. –

Odpowiedz

19

interfejs Builder wybierz Inspektor atrybutów i ustawić znacznik do każdego przycisku z unikalnym numerem, można zrobić coś takiego:

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

Aby połączyć działania na wielu przycisków: w Program Interface Builder, kliknij prawym przyciskiem myszy ViewController w hierarchii widoku, a następnie kliknij lewym przyciskiem myszy, aby przeciągnąć połączenie akcji do każdego przycisku.

+1

Jak podłączyć każdy przycisk do akcji w scenopisie? Nie pozwoli mi kliknąć przycisku i przeciągnąć do IBAction. – SwiftyJD

+4

w Kreatorze interfejsów, kliknij prawym przyciskiem myszy 'ViewController' w hierarchii widoku, a następnie kliknij lewym przyciskiem myszy, aby przeciągnąć połączenie akcji do każdego przycisku –

+1

ok, rozumiem, dzięki! – SwiftyJD

6

Tak, instrukcja zmiany jest tutaj. W przypadku Uibuttonu łączysz go z selektorem, który jest wywoływany, gdy użytkownik wchodzi w interakcję z przyciskiem, zazwyczaj zdarzenie TouchUpInside. The addTarget method, and valid selector signatures (apple.com) Spośród nich, chcesz użyć metody w formacie @IBAction func doSomething(sender: UIButton) lub @IBAction func doSomething(sender: UIButton, forEvent event: UIEvent), aby odwołanie do przycisku, który wywołał zdarzenie, zostało przekazane do selektora.

W kodzie ViewController, musisz odniesień do swoich UIButtons (ewentualnie w serii ujęć lub tworzone ręcznie). Załóżmy, że masz

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

Można by połączyć wszystkie z nich do tej samej metody, i rozgałęzienie logiki opartej na tym, który był nadawcą. np .:

@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 

    } 

} 

Uwaga: Oświadczenia Sprawa w Swift musi być wyczerpująca, więc trzeba to domyślny sprawy, mimo że nigdy nie powinno się nazywać.

3

nie lubię, aby ustawić znacznik, jeśli możemy go rozwiązać bez tagu

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

    } 
}