2015-12-12 1 views
-1

J'essaie de détecter quel bouton radio est actuellement sélectionné en utilisant le nouveau modèle de bouton radio de Xcode 7 (NSButton).Xcode v7.2 - Nouveaux boutons radio: Comment rechercher

J'ai créé une action simple qui s'imprimera pour enregistrer le titre de l'expéditeur lorsqu'un bouton radio est sélectionné. Cela fonctionne:

@IBAction func radioButtonClicked(sender: AnyObject) 
    { 
    print(sender.selectedCell()!.title); 
    } 

Mais ce que je cherche vraiment est la capacité de savoir quel bouton radio est sélectionné ailleurs dans mes codes (en particulier sur un IBAction pour un bouton clic). J'ai essayé:

@IBAction func uploadButtonPressed(sender: AnyObject) 
    { 
    print (radioButton.selectedCell()!.title); 
    } 

Cela ne compile et exécuter, le problème est-il me donne toujours le titre du premier bouton radio ne l'un qui est effectivement sélectionné.

Des idées?


Le « plus proche » je peux obtenir (ce qui est très propre, mais fonctionne « un peu ») est de voir si radioButton.cell? State = 1. Cela me dit que le premier bouton radio est sélectionné. Mais c'est un très mauvais moyen de coder cela et ne permet que 2 options de bouton radio.

if (radioButton.cell?.state == 1) 
    { 
    print ("Radio 1 Selected"); 
    } 
else 
    { 
    print ("Radio 2 Selected"); 
    } 

Répondre

0

J'ai fini par trouver une méthode pour cela.

Première installation I une variable pour stocker quel élément a été vérifié (prédéfinir et la valeur à la valeur que je veux pour le premier bouton radio)

var databaseUploadMethod = "trickle-add"; 

Puis-je comparer pour voir la valeur de titre de la élément sélectionné:

@IBAction func radioButtonClicked(sender: AnyObject) 
    { 
    if ((sender.selectedCell()!.title) == "Trickle Add") 
     { 
     databaseUploadMethod = "trickle-add"; 
     } 
    else if ((sender.selectedCell()!.title) == "Bulk Add All Now") 
     { 
     databaseUploadMethod = "bulk-add"; 
     } 
    } 

Pour référence: J'ai deux boutons radio, le premier a un titre de « Trickle Ajouter » et le second est « en vrac Ajouter tout maintenant ». Ce sont les valeurs que je compare dans ma déclaration if.

2

Utilisez l'identifiant ou la propriété balise dans Interface Builder pour distinguer entre les boutons radio comme:

@IBAction func selectOption(sender: AnyObject) { 
    let id:String = sender.identifier!! 
    case "first identifier": 
     // do some stuff 
     // ... 
    default: 
     // do default stuff 
} 

Une autre option serait une instruction switch cas et définissant des sorties pour chaque bouton radio comme:

@IBOutlet weak var firstOption: NSButton! 
@IBOutlet weak var secondOption: NSButton! 
@IBOutlet weak var thirdOption: NSButton! 

@IBAction func selectOption(sender: AnyObject) { 

    switch sender as! NSButton { 
    case firstOption: 
     print("firstOption") 
    case secondOption: 
     print("secondOption") 
    case thirdOption: 
     print("thirdOption") 
    default: 
     print("won't be called when exhaustive but must always be implemented") 
    } 
}