UISwitch:Swift 3:以编程方式

Rob*_*ith 16 uikit uiswitch swift3

如何以编程方式添加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)
}
Run Code Online (Sandbox Code Playgroud)

辅助方法:

func switchValueDidChange(sender:UISwitch!)
{
    if (sender.on == true){
        print("on")
    }
    else{
        print("off")
    }
}
Run Code Online (Sandbox Code Playgroud)

我一直收到错误,所以我做了Xcode提出的最终导致SIGBART错误的错误.

cra*_*777 24

您在addTarget操作行上调用选择器错误.他们最终在Swift 2中的某一点改变它以摆脱使用字符串进行选择器方法调用,这使得它们更容易出错.

将其更改为此(Swift 3语法)

switchDemo.addTarget(self, action: #selector(switchValueDidChange(_:)), for: .valueChanged)
Run Code Online (Sandbox Code Playgroud)

您基本上在action参数中调用#selector并包含要调用的方法,在您的情况下是switchValueDidChange.请注意最后的(_ :)语法,这表示您要调用的方法采用参数,在您的情况下是UISwitch.

 func switchValueDidChange(_ sender: UISwitch) {
     ...
 }
Run Code Online (Sandbox Code Playgroud)

如果你想调用一个不带参数的常规方法,例如

 func switchValueDidChange() {
 }
Run Code Online (Sandbox Code Playgroud)

比你想说的还要多

switchDemo.addTarget(self, action: #selector(switchValueDidChange), for: .valueChanged)
Run Code Online (Sandbox Code Playgroud)

没有(_ :)语法.

希望这可以帮助


Dan*_*Chi 8

更新到 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)
}
Run Code Online (Sandbox Code Playgroud)

辅助方法:

@objc func switchValueDidChange(_ sender: UISwitch!) {
    if (sender.isOn){
        print("on")
    }
    else{
        print("off")
    }
}
Run Code Online (Sandbox Code Playgroud)