web-dev-qa-db-fra.com

Obtenir le bouton appuyé id sur Swift via l'expéditeur

J'ai donc un storyboard avec 3 boutons. Je veux juste créer une action pour ces 3 boutons et décider quoi faire en fonction de leur étiquette/id ...

Existe-t-il un moyen d’obtenir une sorte d’identificateur pour chaque bouton?

En passant, ce sont des images, donc ils n'ont pas de titre.

@IBAction func mainButton(sender: UIButton) {
    println(sender)
}
18
matt

Vous pouvez définir une tag dans le storyboard pour chacun des boutons. Ensuite, vous pouvez les identifier de cette façon: 

@IBAction func mainButton(sender: UIButton) {
    println(sender.tag)
}

EDIT: Pour plus de lisibilité, vous pouvez définir une énumération avec des valeurs correspondant à la balise sélectionnée. Donc, si vous définissez des balises telles que 0, 1, 2 pour vos boutons, au-dessus de votre déclaration de classe, vous pouvez faire quelque chose comme ceci:

enum SelectedButtonTag: Int {
    case First
    case Second
    case Third
}

Et puis, au lieu de gérer les valeurs codées en dur, vous aurez:

@IBAction func mainButton(sender: UIButton) {
    switch sender.tag {
        case SelectedButtonTag.First.rawValue:
            println("do something when first button is tapped")
        case SelectedButtonTag.Second.rawValue:
            println("do something when second button is tapped")
        case SelectedButtonTag.Third.rawValue:                       
            println("do something when third button is tapped")
        default:
            println("default")
    }
}
21
Vasil Garov

Si vous voulez créer 3 boutons avec une seule méthode, vous pouvez le faire en suivant le code ... Essayez ceci

Swift 3
Exemple :-

override func viewDidLoad()
{
    super.viewDidLoad()
    Button1.tag=1
    Button1.addTarget(self,action:#selector(buttonClicked),
                      for:.touchUpInside)
    Button2.tag=2
    Button2.addTarget(self,action:#selector(buttonClicked),
                      for:.touchUpInside)
    Button3.tag=3
    Button3.addTarget(self,action:#selector(buttonClicked),
                      for:.touchUpInside)

}

func buttonClicked(sender:UIButton)
{
    switch sender.tag
    {
        case 1: print("1")     //when Button1 is clicked...
            break
        case 2: print("2")     //when Button2 is clicked...
            break
        case 3: print("3")     //when Button3 is clicked...
            break
        default: print("Other...")
    }
}
14
Pragnesh Vitthani

Vous pouvez créer un point de vente pour vos boutons, puis implémenter:

@IBAction func mainButton(sender: UIButton) {
    switch sender {
    case yourbuttonname:
        // do something
    case anotherbuttonname:
        // do something else
    default: println(sender)
    }
}
5
Allan Chau

Swift 3 Code: In xcode Veuillez définir l’étiquette de chaque bouton pour que le code suivant fonctionne.

@IBAction func threeButtonsAction(_ sender: UIButton) {

        switch sender.tag {
        case 1:
            print("do something when first button is tapped")
            break
        case 2:
            print("do something when second button is tapped")
            break
        case 3:
            print("do something when third button is tapped")
            break
        default:
            break
        }
    }
5
mriaz0011

En supposant que vous leur donniez tous les noms propres sous le nom @IBOutlets:

@IBOutlet var weak buttonOne: UIButton!
@IBOutlet var weak buttonTwo: UIButton!
@IBOutlet var weak buttonThree: UIButton!

Vous pouvez utiliser ce qui suit pour déterminer lequel est lequel

@IBAction func didPressButton(sender: AnyObject){
 // no harm in doing some sort of checking on the sender
 if(sender.isKindOfClass(UIButton)){

    switch(sender){
    case buttonOne:    
                   //buttonOne action  
                   break
    case buttonTwo:   
                  //buttonTwo action  
                   break
    case buttonThree: 
                  //buttonThree action  
                   break
    default:
                   break
    }
}
3
rach

Vous devez définir la valeur tag sur ce dont vous avez besoin et y accéder avec

sender.tag
3
Nerkyator

Swift 4

@IBAction func buttonPressed(_ sender: UIButton) {
        if sender.tag == 1 {
            print("Button 1 is pressed")
        }
}
3
Jonas Deichelmann

Vous pouvez faire comme ça, il vous suffit de donner un tag à tous les boutons et faire comme ceci: 

@IBAction func mainButton(sender: AnyObject)
    {
        switch sender.tag {
        case 1:
            println("do something when first button is tapped")
        case 2:
            println("do something when second button is tapped")
        case 3:
            println("do something when third button is tapped")

        default:
            println("default")
        }

    }
2
user2834653

Dans mon cas, ce que j'ai fait, tout comme les réponses ci-dessus, j'ai utilisé la balise pour identifier le bouton spécifique. Ce que j'ai ajouté est que j'ai ajouté une extension UIButton qui ajoute un identifiant afin que je puisse définir un identifiant de chaîne

j'avais trois boutons avec des balises 0, 1 and 2

Puis créé l'extension

extension UIButton {
    var id: String {
        let tag = self.tag

        switch tag {
            case 0:
                return "breakfast"

           case 1:
               return "lunch"

           case 2:
               return "dinner"

           default:

               return "None"
       }
    }
  }

En accédant à un bouton dans une action IBAction, je voudrais simplement appeler:

sender.id
0
Paul Kahohi

Dans le cas où vous avez étiqueté vos boutons "1", "2", "3":

@IBAction func mainButton(sender: UIButton) {
    switch sender.titleLabel?.text {
        case "1":
            print("do something when first button is tapped")
        case "2":
            print("do something when second button is tapped")
        case "3":
            print("do something when third button is tapped")
        default:
            () // empty statement or "do nothing"
    }
}
0
Ikem Krueger

Dans ce cas, vous pouvez utiliser NSObjectextension Element d'accessibilité UIAccessibility.

J'ai utilisé accessibilityLabel et accessibilityIdentifier, les deux méthodes permettant de vérifier les appels et les conditions.

Premier Vous pouvez définir une Accessibilité Label ou Identifier dans le storyboard pour chacun des boutons de l'inspecteur d'Identité. L'accessibilité devrait être activée.

 enter image description here

Pour vérifier/identifier le bouton par 

@IBAction func selectionPicker(_ sender: UIButton){
        if sender.accessibilityLabel == "childType"{ //Check by accessibilityLabel
            print("Child Type")
        }
        if sender.accessibilityIdentifier == "roomType"{ //Check by accessibilityIdentifier
            print("Room Type")
        }
        performSegue(withIdentifier: "selectionViewSegue", sender:sender)
    }

Sur Swift 3.2 et 4.0 avec Xcode 9.0

0
Pranavan Sp