2016-06-16 2 views
5

저는 앱의 언어를 전환 할 수있는 버튼이 각각 하나씩 있습니다. 각 단추에 대해 여러 개의 IBActions를 만드는 대신 하나의 IBAction에 모두 연결하고 단추를 눌렀을 때 언어를 변경할 수있는 방법이 있습니까? 전환 문이이 상황에서 사용하는 것이 좋지만 정확히 어떻게 설정해야하는지는 잘 모르겠습니다.Swift에서 하나의 IBAction을 여러 버튼에 사용하는 방법은 무엇입니까?

인터페이스 빌더에서
+0

예없이 좋은 생각을 해결할 수있는 경우, 태그를 설정하고 싶지 않아요; D –

+0

어떤 생각이 어떻게 ibactions을 처리 한 최대를 설정? – SwiftyJD

+0

발신자는 제목, 태그 및 기타 등 많은 속성을가집니다. 또한 ID 속성을 사용하여 사용자 정의 버튼 클래스를 만들 수 있습니다. –

답변

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 

    } 

} 

참고 : 당신이 그것을 호출해서는 안하더라도, 기본 경우를 포함 할 수 있도록 스위프트의 사례 문, 철저한해야합니다.

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 { 

    } 
} 
관련 문제