2016-09-28 12 views
7

私はプログラムでuiswitchを追加し、オンのときにアクションを呼び出し、オフのときにアクションを呼び出すことはできますか?私は今、何時間も探しています。助けてもらえますか?私はスイッチを追加する方法を知っていますが、私は何のシーンに関係なく画面にとどまります。これまでのところ、ボタンを追加してオンからオフに切り替えることができましたが、何らかの理由でスイッチが各シーンの画面に表示されるだけです。私はそれ以来迷っていたので、私はこれに従った。 How to programmatically put a UISwitch in a SpriteKit/SkceneUISwitch:Swift 3:Programmatically

はい可能です。ちょうどあなたの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エラーになってしまった提案何をしたように、エラーを取得保管しました。

+0

これまでの内容を更新してください。そしてあなたが持っている問題を明確に説明してください。 – rmaddy

+0

申し訳ありません。私はあなたが編集で言ったことをしました。 –

+0

switchDemo.addTarget(...)のアクション部分でセレクタを間違って呼び出しています。私の答えを確認してください – crashoverride777

答えて

11

addTargetアクション行でセレクタを間違って呼び出しています。彼らは最終的にSwift 2の1つの点でそれを変更して、セレクタメソッド呼び出しに文字列を使用しなくしました。これにより、エラーが発生しにくくなりました。これに

変更、それを(スウィフト3構文)

switchDemo.addTarget(self, action: #selector(switchValueDidChange(_:)), for: .valueChanged) 

あなたは基本的にアクションパラメータで#selectorを呼び出して、あなたの場合switchValueDidChangeには、呼び出したいメソッドが含まれています。最後に(_ :)構文を書き留めておきます。これは、呼び出すメソッドがUISwitchのパラメータを取ることを示しています。

func switchValueDidChange(_ sender: UISwitch) { 
    ... 
} 

あなたはあなただけ(_ :)構文なし

switchDemo.addTarget(self, action: #selector(switchValueDidChange), for: .valueChanged) 

を言うよりも、何のパラメータ例えば

func switchValueDidChange() { 
} 

をとらない通常のメソッドを呼び出したい場合。

・ホープこのパラメータを

+0

あなたは言いましたが、私は "UISwitch!タイプ"(別名ImplicitlyUnwrappedOptional .Type ')の値を' UISwitch! 'UISwitch!.Type'(別名 'ImplicitlyUnwrappedOptional .Type')の値を期待される引数型 'UISwitch!'に変換します。'' –

+0

switchValueDidChangeのパラメータを誤っている可能性があります。この記事をチェックしてください。http://www.ioscreator.com/tutorials/uiswitch-tutorial-in-ios8-with-swift – crashoverride777

+1

Swift 3では、私のaddTarget() 'switch.addTarget(self、action:#selector(switchChanged(switch :)):for .valueChanged)' –

0

を支援します。

@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 
    } 


} 
関連する問題