UISwitch: Swift 3: Программно
Как я могу программно добавить uiswitch и вызвать действие, когда включено и выключено? Я ищу уже несколько часов. Могу я попросить помощи? Я знаю, как добавить переключатель, но он остается на экране независимо от того, на какой сцене я нахожусь. До сих пор я мог добавить кнопку и заставить ее переключаться с включения на выключение, но по какой-то причине переключатель просто говорит на экране в каждой сцене. Я был потерян после этого, поэтому я последовал за этим; от как программно поместить UISwitch в SpriteKit / Skcene
Да, это возможно. Просто используйте этот код в своем классе 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)
}
вспомогательный метод:
func switchValueDidChange(sender:UISwitch!)
{
if (sender.on == true){
print("on")
}
else{
print("off")
}
}
Я продолжал получать ошибки, поэтому я сделал то, что предложил Xcode, что закончилось ошибкой SIGBART.
2 ответов
вы вызываете селектор неправильно в строке действия addTarget. Они, наконец, изменили его в какой-то момент в Swift 2, чтобы избавиться от использования строк для вызовов метода селектора, что теперь делает их намного менее подверженными ошибкам.
измените его на это (синтаксис Swift 3)
switchDemo.addTarget(self, action: #selector(switchValueDidChange(_:)), for: .valueChanged)
вы в основном вызываете # selector в параметре action и включаете метод, который хотите вызвать, в вашем случае switchValueDidChange. Обратите внимание на синтаксис ( _ :) в конце, что указывает на то, что метод вы хотите вызвать принимает параметр, в вашем случае UISwitch.
func switchValueDidChange(_ sender: UISwitch) {
...
}
если вы хотите вызвать обычный метод, который не принимает параметров e.g
func switchValueDidChange() {
}
чем вы бы просто сказали
switchDemo.addTarget(self, action: #selector(switchValueDidChange), for: .valueChanged)
без (_:) синтаксис.
надеюсь, что это помогает
параметр:
@IBOutlet var categorySwitch:UISwitch!
var categorySwitchIsOn:Bool = false
на viewDidLoad:
override func viewDidLoad() {
super.viewDidLoad()
categorySwitch.addTarget(self, action:#selector(ViewController.categorySwitchValueChanged(_:)), for: .valueChanged)
}
связанные функции:
func categorySwitchValueChanged(_ sender : UISwitch!){
if sender.isOn {
categorySwitchIsOn = true
} else {
categorySwitchIsOn = false
}
}