2016-09-28 63 views
7

如何以編程添加uiswitch和打電話的時候,就一個動作,一個當了嗎?我一直在尋找幾個小時。我可以請一些幫助嗎?我知道如何添加開關,但無論我在哪個場景中,它都會保持在屏幕上。到目前爲止,我已經能夠添加按鈕並將其從開啓切換爲關閉,但由於某種原因,交換機只是在每個場景的屏幕上說出。之後我迷路了,所以我跟着這個;從How to programmatically put a UISwitch in a SpriteKit/SkceneUISwitch:斯威夫特3:編程

是的,它是可能的。只需在您的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) 
} 

Helper方法:

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中的某個時候改變了它,擺脫了使用選擇器方法調用的字符串,這使得它們更容易出錯。

改成這樣(SWIFT 3語法)

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

你基本上調用在動作參數#selector,包括你想打電話,你的情況switchValueDidChange的方法。注意最後的(_ :)語法,這表示你想調用的方法帶一個參數,在你的情況下是一個UISwitch。

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

如果你想調用不帶參數的常規方法e.g

func switchValueDidChange() { 
} 

比你剛纔說

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

沒有(_ :)語法。

希望這有助於

+0

香港專業教育學院做了你所說的做的一切,但我得到「無法將類型‘UISwitch!。鍵入’(又名‘ImplicitlyUnwrappedOptional 。鍵入’)預期的參數類型的值‘UISwitch!’」和「不能轉換型「UISwitch!。鍵入」(又名「ImplicitlyUnwrappedOptional 。鍵入」)預期的參數類型「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 
    } 


}