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)
}
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")
}
}
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...")
}
}
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)
}
}
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
}
}
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
}
}
Vous devez définir la valeur tag
sur ce dont vous avez besoin et y accéder avec
sender.tag
@IBAction func buttonPressed(_ sender: UIButton) {
if sender.tag == 1 {
print("Button 1 is pressed")
}
}
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")
}
}
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
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"
}
}
Dans ce cas, vous pouvez utiliser NSObject
extension
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.
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