Ios Swift-UISwitch更改背景颜色-仅工作一次?

Ios Swift-UISwitch更改背景颜色-仅工作一次?,ios,swift,Ios,Swift,从零开始快速学习。为什么我的UISwitch代码在尝试更改UIVIew背景颜色时只工作一次?我看过一些关于IBOutlet的东西,但不知道如何添加。谢谢你的帮助 谢谢 // // ViewController.swift // testChangeBackground // // Created by Paul Balfour on 14/08/2014. // Copyright (c) 2014. All rights reserved. // import UIKit clas

从零开始快速学习。为什么我的UISwitch代码在尝试更改UIVIew背景颜色时只工作一次?我看过一些关于IBOutlet的东西,但不知道如何添加。谢谢你的帮助

谢谢

//
//  ViewController.swift
//  testChangeBackground
//
//  Created by Paul Balfour on 14/08/2014.
//  Copyright (c) 2014. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

var mySwitch = UISwitch()

@IBAction func mySwitch(sender: UISwitch) {
println("Switched")
    changeBackground()

}

func changeBackground() {
    if mySwitch.on {
        self.view.backgroundColor = UIColor.redColor()
        return
    }
    else
    {
        self.view.backgroundColor = UIColor.yellowColor()
        return
    }
}


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}


啊哈。因此,UISwitch也需要成为工作的出口。-我不明白的是为什么一个IB的出口也是如此?(在下面工作)。谢谢

导入UIKit

class ViewController: UIViewController {


@IBAction func mySwitch(sender: UISwitch) {
println("Switched")
    changeBackground()

}

@IBOutlet var mySwitch: UISwitch!


func changeBackground() {
    if mySwitch.on {
        self.view.backgroundColor = UIColor.redColor()
        return
    }
    else
    {
        self.view.backgroundColor = UIColor.yellowColor()
        return
    }
}
}

那么您正在创建一个

var mySwitch = UISwitch()
一次,但这并没有连接到任何东西,所以当你检查开关是否打开时,它不工作。您需要做的是将这个变量连接到一个IBOutlet,就像您在文章中提到的那样。这样,当实际切换UISwitch时,变量将正确表示开关的状态。要做到这一点,请执行类似于为您的操作创建IBOutlet的操作。它应该是这样的:

    @IBOutlet var mySwitch: UISwitch!

您应该能够通过从故事板/xib拖动控件来创建它,就像您对操作所做的那样

太好了。您能解释一下为什么UISwitch在不受影响的情况下也需要使用IBOutlet吗?。谢谢你说没有受到影响是什么意思?您正在切换显示器上开关的状态,因此需要某种方式来收听。IBOutlet让您了解交换机发生了什么,而IBAction在切换时执行操作。现在我再看一遍,另一种方法是将作为“发送者”得到的开关传递给changeBackground方法,因为发送者是正确的UI开关。啊,我明白了。切换开关时,我只是想执行IBAction。没有意识到我也需要听开关。谢谢你的澄清。