Comment puis-je ajouter par programme un commutateur uis et appeler une action quand elle est activée et une autre quand elle est désactivée? Je cherche depuis des heures maintenant. Puis-je s'il vous plaît avoir de l'aide? Je sais comment ajouter le commutateur, mais il reste à l'écran quelle que soit la scène dans laquelle je suis. Jusqu'à présent, j'ai pu ajouter le bouton et le faire passer de activé à désactivé, mais pour une raison quelconque, le commutateur indique uniquement l'écran à chaque scène. J'étais perdu après cela alors j'ai suivi ceci; from Comment mettre par programme un UISwitch dans un SpriteKit/Skcene
Oui c'est possible. Utilisez simplement ce code dans votre classe SKScene:
override func didMoveToView(view: SKView) {
/* Setup your scene here */
let switchDemo = UISwitch(frame:CGRectMake(150, 300, 0, 0))
switchDemo.on = true
switchDemo.setOn(true, animated: false)
switchDemo.addTarget(self, action: "switchValueDidChange:", forControlEvents: .ValueChanged)
self.view!.addSubview(switchDemo)
}
Méthode d'assistance:
func switchValueDidChange(sender:UISwitch!)
{
if (sender.on == true){
print("on")
}
else{
print("off")
}
}
Comme je continuais à avoir des erreurs, j’ai fait ce que Xcode avait suggéré, ce qui a abouti à l’erreur SIGBART.
Vous appelez le sélecteur incorrect sur la ligne d'action addTarget. Ils l'ont finalement changé à un moment donné dans Swift 2 pour se débarrasser de l'utilisation de chaînes de caractères pour les appels de méthode de sélecteur, ce qui les rend désormais moins sujettes aux erreurs.
Changez-le en ceci (syntaxe Swift 3)
switchDemo.addTarget(self, action: #selector(switchValueDidChange(_:)), for: .valueChanged)
En gros, vous appelez #selector dans le paramètre action et incluez la méthode à appeler, dans votre cas, switchValueDidChange. Notez la syntaxe (_ :) à la fin, ce qui indique que la méthode que vous voulez appeler prend un paramètre, dans votre cas un UISwitch.
func switchValueDidChange(_ sender: UISwitch) {
...
}
Si vous souhaitez appeler une méthode standard sans paramètres, par exemple
func switchValueDidChange() {
}
que tu dirais
switchDemo.addTarget(self, action: #selector(switchValueDidChange), for: .valueChanged)
sans la syntaxe (_ :).
J'espère que cela t'aides
Avec paramètre:
@IBOutlet var categorySwitch:UISwitch!
var categorySwitchIsOn:Bool = false
Sur viewDidLoad:
override func viewDidLoad() {
super.viewDidLoad()
categorySwitch.addTarget(self, action:#selector(ViewController.categorySwitchValueChanged(_:)), for: .valueChanged)
}
Fonction associée:
func categorySwitchValueChanged(_ sender : UISwitch!){
if sender.isOn {
categorySwitchIsOn = true
} else {
categorySwitchIsOn = false
}
}