UISwitch:Swift 3:以编程方式
UISwitch: Swift 3: Programmatically
如何以编程方式添加 uiswitch 并在打开时调用一个动作,在关闭时调用一个动作?我已经搜索了几个小时了。我可以帮忙吗?我知道如何添加开关,但无论我在什么场景,它都会停留在屏幕上。到目前为止,我已经能够添加按钮并使其从打开切换到关闭,但由于某种原因,该开关只是在每个场景的屏幕上显示。在那之后我迷路了,所以我跟着这个;来自
是的,这是可能的。只需在您的 SKScene class:
中使用此代码
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 错误。
您在 addTarget 操作行上错误地调用了选择器。他们最终在 Swift 2 中的某一时刻更改了它,以摆脱使用字符串进行选择器方法调用,这现在使它们更不容易出错。
改成这样(Swift 3语法)
switchDemo.addTarget(self, action: #selector(switchValueDidChange(_:)), for: .valueChanged)
您基本上是在操作参数中调用#selector 并包括您要调用的方法,在您的例子中是 switchValueDidChange。请注意末尾的 (_:) 语法,这表明您要调用的方法需要一个参数,在您的例子中是一个 UISwitch。
func switchValueDidChange(_ sender: UISwitch) {
...
}
如果您想调用不带参数的常规方法,例如
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
}
}
更新为swift 5
override func didMoveToView(view: SKView) {
/* Setup your scene here */
let switchDemo = UISwitch(frame:CGRect(x: 150, y: 300, width: 0, height: 0))
switchDemo.isOn = true
switchDemo.setOn(true, animated: false)
switchDemo.addTarget(self, action: #selector(switchValueDidChange(_:)), for: .valueChanged)
self.view!.addSubview(switchDemo)
}
辅助方法:
@objc func switchValueDidChange(_ sender: UISwitch!) {
if (sender.isOn){
print("on")
}
else{
print("off")
}
}
如何以编程方式添加 uiswitch 并在打开时调用一个动作,在关闭时调用一个动作?我已经搜索了几个小时了。我可以帮忙吗?我知道如何添加开关,但无论我在什么场景,它都会停留在屏幕上。到目前为止,我已经能够添加按钮并使其从打开切换到关闭,但由于某种原因,该开关只是在每个场景的屏幕上显示。在那之后我迷路了,所以我跟着这个;来自
是的,这是可能的。只需在您的 SKScene class:
中使用此代码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 错误。
您在 addTarget 操作行上错误地调用了选择器。他们最终在 Swift 2 中的某一时刻更改了它,以摆脱使用字符串进行选择器方法调用,这现在使它们更不容易出错。
改成这样(Swift 3语法)
switchDemo.addTarget(self, action: #selector(switchValueDidChange(_:)), for: .valueChanged)
您基本上是在操作参数中调用#selector 并包括您要调用的方法,在您的例子中是 switchValueDidChange。请注意末尾的 (_:) 语法,这表明您要调用的方法需要一个参数,在您的例子中是一个 UISwitch。
func switchValueDidChange(_ sender: UISwitch) {
...
}
如果您想调用不带参数的常规方法,例如
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
}
}
更新为swift 5
override func didMoveToView(view: SKView) {
/* Setup your scene here */
let switchDemo = UISwitch(frame:CGRect(x: 150, y: 300, width: 0, height: 0))
switchDemo.isOn = true
switchDemo.setOn(true, animated: false)
switchDemo.addTarget(self, action: #selector(switchValueDidChange(_:)), for: .valueChanged)
self.view!.addSubview(switchDemo)
}
辅助方法:
@objc func switchValueDidChange(_ sender: UISwitch!) {
if (sender.isOn){
print("on")
}
else{
print("off")
}
}